提交网站入口/黑帽seo教程
OI-wiki太强啦!!!
补充:求经过x的最小环
可以求不经过x下x邻接点中任意两点的最短距离,用floyd O(n3)O(n^3)O(n3)
邻接点最短距离可以改为二进制分组后Dijkstra,O((n+m)logmlogn)O((n+m)\log m\log n)O((n+m)logmlogn),或者完全图O(n2logn)O(n^2\log n)O(n2logn)
更好的方法是求以x为起点跑最短路,记录到u点的最短路径是从x的哪个邻接点出来的(称作出发点),枚举每一条边(u,v,w),如果两个端点的出发点不同,则将dis[u]+dis[v]+w计入答案。显然最小环上一定有这样的边(如果边的其中一端为x则出发点记为x)。复杂度O((n+m)logm)O((n+m)\log m)O((n+m)logm),完全图O(n2)O(n^2)O(n2)
或者可以记录x到每个点的最短路和次短路(转移时保证最短路和次短路的出发点不同),那么最短路+次短路的最小值就是答案,其实与上面的方法是等价的,但是由于要求次短路所以会慢一倍多(吧)。