| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我用kruskal做的。为什么错啊。。。有什么边界数据吗?#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
int x,y,w,ii;
};
node a[10005];
int cmp (node a,node b)
{
return a.w<b.w;
}
int flag[105],n;
node ans[105];
int findcircle(node a)
{
int temp,temp2,i;
if(flag[a.x]==flag[a.y]&&flag[a.x]!=0)return 0;
else
{
if(flag[a.x]==flag[a.y]&&flag[a.x]==0)flag[a.x]=flag[a.y]==a.ii;
else
{
temp=flag[a.x]<flag[a.y]?flag[a.x]:flag[a.y];
temp2=flag[a.x]>flag[a.y]?flag[a.x]:flag[a.y];
for(i=0;i<n;i++)if(flag[i]==temp2)flag[i]=temp;
}
return 1;
}
}
int main ()
{
int t,m,i,j,k,ff,temp,top,sum,sum1,count;
scanf("%d",&t);
while(t--)
{
ff=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)flag[i]=0;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w);
a[i].ii=i;
}
sort(a,a+m,cmp);
sum=0;
top=0;
count=1;
for(i=0;count<=n-1;i++)
{
if(findcircle(a[i]))
{
ans[top++]=a[i];
sum+=a[i].w;
count++;
}
}
for(k=0;k<top;k++)
{
for(i=0;i<n;i++)flag[i]=0;
sum1=0;
temp=ans[k].ii;
count=1;
for(i=0;count<=n-1;i++)
{
if(findcircle(a[i])&&a[i].ii!=temp)
{
sum1+=a[i].w;
count++;
}
}
if(sum==sum1){ff=1;break;}
}
if(ff==1)printf("Not Unique!\n");
else printf("%d\n",sum);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator