HDU1879
Posted whiteli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU1879相关的知识,希望对你有一定的参考价值。
已经建的边两个端点合并一下再跑Kruscal就好了
注意:cin会被卡
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node{ 5 int from,to,w; 6 bool operator < (const node &a){ 7 return w<a.w; 8 } 9 }a[10010]; 10 int n,m,u,v,w,x,f[101],ans; 11 12 void ini(){ 13 for (int i=1;i<=n;i++) f[i]=i; 14 ans=0; 15 } 16 17 int getf(int u){ 18 return f[u]==u?f[u]:f[u]=getf(f[u]); 19 } 20 21 void merge(int u,int v){ 22 f[getf(u)]=getf(v); 23 } 24 25 void solve(){ 26 while (scanf("%d",&n)!=EOF){ 27 if (n==0) break; 28 ini(); 29 m=n*(n-1)/2; 30 for (int i=1;i<=m;i++){ 31 scanf("%d %d %d %d",&u,&v,&w,&x); 32 a[i]={u,v,w}; 33 if (x) merge(u,v); 34 } 35 sort(a+1,a+1+m); 36 for (int i=1;i<=m;i++){ 37 if (getf(a[i].from)!=getf(a[i].to)){ 38 ans+=a[i].w; 39 merge(a[i].from,a[i].to); 40 } 41 } 42 cout<<ans<<endl; 43 } 44 } 45 46 int main() 47 { 48 solve(); 49 return 0; 50 }
以上是关于HDU1879的主要内容,如果未能解决你的问题,请参考以下文章