最小生成树,这题容易超时,把已经建成的路,成本记为零在建树
继续畅通工程
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10190 Accepted Submission(s): 4444
当N为0时输入结束。
3 1 2 1 0 1 3 2 0 2 3 4 0 3 1 2 1 0 1 3 2 0 2 3 4 1 3 1 2 1 0 1 3 2 1 2 3 4 1 0
3 1 0
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int father[102];
struct nobe
{
int begin;
int end;
int prit;
}dege[5001];
int cmp(const nobe&a,const nobe&b)
{
return a.prit<b.prit;
}
int find(int r)
{
while(r!=father[r])
r=father[r];
return r;
}
int main()
{
int m,n,i,j,r,sum,x,y,num,p;
while(cin>>n&&n)
{
num=sum=0;
m=n*(n-1)/2;
for(i=0;i<n;i++)
father[i]=i;
for(i=0;i<m;i++)
{
cin>>dege[i].begin>>dege[i].end>>dege[i].prit>>r;
if(r)
{
dege[i].prit=0;
}
}
sort(dege,dege+m,cmp);
for(i=0;i<m;i++)
{
x=find(dege[i].begin);
y=find(dege[i].end);
if(x!=y)
{
father[x]=y;
sum+=dege[i].prit;
}
}
cout<<sum<<endl;
}
}