MST模板
prime
prime详解
模版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| using namespace std; int g[maxn][maxn]; int lowcost[maxn]; int visit[maxn]; int n; int prime(){ int Min,mincost=0,next; memset(visit,0,sizeof(visit)); for(int i=1;i<=n;i++){ lowcost[i]=g[1][i]; } visit[1]=1; for(int i=1;i<n;i++){ Min=inf; for(int j=1;j<=n;j++){ if(!visit[j] && Min>lowcost[j]){ Min=lowcost[j]; next=j; } } mincost+=Min; visit[next]=1; for(int j=1;j<=n;j++){ if(!visit[j] && lowcost[j]>g[next][j]){ lowcost[j]=g[next][j]; } } } return mincost; } int main(){ // freopen("input.txt","r",stdin); ios::sync_with_stdio(false); cin.tie(0); while(cin>>n){ memset(g,inf,sizeof(g)); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>g[i][j]; } } int cost=prime(); cout<<cost<<endl; } return 0; } // 6 10 1 2 6 1 3 1 1 4 5 2 3 5 2 5 3 3 4 5 3 5 6 3 6 4 4 6 2 5 6 6 answer:15
|
kruskal
kruskal详解
模版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| const LL mod=1e9+7; const LL INF=(LL)1e18; using namespace std; struct edge{ int u,v,w; edge(int u,int v,int w):u(u),v(v),w(w){} bool operator < (const edge& x) const{ return w<x.w; } }; int n,m; int p[maxn]; vector<edge>e; int find(int x){ return x==p[x]?x:p[x]=find(p[x]); } int kruskal(){ int ans=0; int cnt=0; sort(e.begin(),e.end()); for(int i=0;i<=n;i++) p[i]=i; for(int i=0;i<m;i++){ int x=find(e[i].u),y=find(e[i].v); if(x!=y){ ans+=e[i].w; p[x]=y; cnt++; } if(cnt==n-1) break; } return ans; } int main(){ // freopen("input.txt","r",stdin); // freopen("ouput.txt","w",sdout); ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>m; for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; e.pb(edge(u,v,w)); } cout<<kruskal()<<endl; return 0; } // 6 10 1 2 6 1 3 1 1 4 5 2 3 5 2 5 3 3 4 5 3 5 6 3 6 4 4 6 2 5 6 6 answer:15
|