(Photographs taken from dzj_ppt)
Minimum spanning tree
Kruskal
Code
#include<iostream> #include<cstdio> #include<algorithm> #define maxn 5000 #define maxm 200000 using namespace std; int fa[maxn]; struct edge{ int u,v,w; }e[maxm]; int n,m; int u,v; int ans=0; void init(){//初始化 for(int i=1;i<=n;i++){ fa[i]=i; } } int getFa(int x){ if(x==fa[x]) return x; else return fa[x]=getFa(fa[x]); } void merge(int x,int y){ fa[x]=y; } bool cmp(edge a,edge b){//结构体比较 return a.w<b.w; } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; E [I] .u = U; E [I] .v = V; E [I] .W = W; } Sort (E + . 1 , E + m + . 1 , CMP); // accordance weight sorting, greedy Thought the init (); for ( int I = . 1 ; I <= m; I ++ ) { int T1 = getFa (E [I] .u); int T2 = getFa (E [I] .v); IF (T2! = T1) { Merge (T1, T2); ANS + = E [I] .W; V } } Cout << years; return 0 ; }