Minimum Spanning Tree Notes

Kruskal

 1 //用并查集实现
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 struct edge{
 9     int u,v,w;
10 }a[10001];
11 bool cmp(edge e1,edge e2){
12     return e1.w<e2.w;
13 }
14 int fu,fv,n,m,u,v,w,tot=0,ans=0,fa[10001];
15 int ff(int u){
16     return fa[u]==u?fa[u]:ff(fa[u]);
17 }
18 void add(int u,int v,int w){
19     a[++tot].u=u;
20     a[tot].v=v;
21     a[tot].w=w;
22 }
23 int main(){
24     scanf("%d%d",&n,&m);
25     for(int i=1;i<=m;i++){
26         scanf("%d%d%d",&u,&v,&w);
27         add(u,v,w);
28     }
29     for(int i=1;i<=n;i++){
30         fa[i]=i;
31     }
32     sort(a+1,a+n+1,cmp);
33     for(int i=1;i<=m;i++){
34         fu=ff(a[i].u);
35         fv=ff(a[i].v);
36         if(fu!=fv){
37             ans+=a[i].w;
38             fa[fu]=fv;
39         }
40     }
41     printf("%d",ans);
42     return 0;
43 }

Prim

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 int n,m,u,v,w,minn,minx,ans=0,map[1001][1001],mst[100001],lc[100001];
 6 using namespace std;
 7 void prim(){
 8     for(int i=2;i<=n;i++){
 9         lc[i]=map[1][i];
10         mst[i]=1;
11     }
 12      mst [ 1 ] = 0 ;
13      for ( int i = 2 ; i <= n; i ++ ) {
 14          minn = 2147483647 ;
15          for ( int j = 2 ; j <= n; j ++ ) {
 16              if (lc [j] <minn && lc [j]! = 0 ) {
 17                  minn = lc [j];
18                  minx = j;
19              }
 20          }
 21          ans + = from;
22         lc[minx]=0;
23         for(int j=2;j<=n;j++){
24             if(map[minx][j]<lc[j]){
25                 lc[j]=map[minx][j];
26                 mst[j]=minx;
27             }
28         }
29     }
30 }
31 int main(){
32     memset(map,0x7f,sizeof(map));
33     scanf("%d%d",&n,&m);
34     for(int i=1;i<=m;i++){
35         scanf("%d%d%d",&u,&v,&w);
36         map[u][v]=w;
37         map[v][u]=w;
38     }
39     prim();
40     printf("%d",ans);
41     return 0;
42 }
43 /*
44 6 10  
45 1 2 6  
46 1 3 1  
47 1 4 5  
48 2 3 5  
49 2 5 3  
50 3 4 5  
51 3 5 6  
52 3 6 4  
53 4 6 2  
54 5 6 6 
55 */

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324832795&siteId=291194637