裸kruskal算法
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<string> 5 #include<cstring> 6 #include<cmath> 7 #include<algorithm> 8 #include<ctime> 9 #include<queue> 10 #include<stack> 11 #include<map> 12 #include<set> 13 using namespace std; 14 int n,m,fa[333],q,w,e,tot,o; 15 int getint() 16 { 17 int ret=0,f=1;char ch=getchar(); 18 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 19 while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar(); 20 return f==-1?-ret:ret; 21 } 22 struct bian 23 { 24 int u,v,w; 25 bian(int u=0,int v=0,int w=0):u(u),v(v),w(w){} 26 bool operator < (const bian &a)const 27 { 28 return w<a.w; 29 } 30 }bi[100010]; 31 int find(int x) 32 { 33 return x==fa[x]?x:fa[x]=find(fa[x]); 34 } 35 int main() 36 { 37 n=getint(),m=getint(); 38 for(int i=1;i<=n;i++)fa[i]=i; 39 for(int i=1;i<=m;i++) 40 { 41 q=getint(),w=getint(),e=getint(); 42 bi[i]=bian(q,w,e); 43 } 44 sort(bi+1,bi+m+1); 45 for(int i=1;i<=m;i++) 46 { 47 q=find(bi[i].u),w=find(bi[i].v); 48 if(q!=w) 49 { 50 fa[q]=w,tot++; 51 if(tot==n-1)o=i; 52 } 53 } 54 printf("%d %d",n-1,bi[o].w); 55 return 0; 56 }