kruskal模板 (最短路)

运行时注意编译不通过的那几行中的注释,与题目有关

做题以后可以再留意一下注释

O(\left | E \right |log\left | V \right |) + sort 边的时间 :

//并查集
int pre[maxn],rnk[maxn];  //要的是结点数的范围
inline void init(int n) {for(int i=0;i<=n;i++) pre[i]=i,rnk[i]=0;} //注意这里可能 会需要改一下 i 的范围
inline int find(int x)
{
    int r=x,i=x,j;
    while(pre[r]!=r) r=pre[r];
    while(i!=r) {j=pre[i];pre[i]=r;i=j;} rnk[r]=2;
    return r;
}
inline void join(int x,int y)
{
    int a=find(x),b=find(y);
    if(a==b) return;
    if(rnk[a]

 

你可能感兴趣的:(图论_最小生成树,图论_模板)