我靠,怎么过不了,不行 明天继续debug 明明过样例了 我的天。。。。
次奥,打错了一个代码半天没找出来!!!哭啊。。
这里记一下,kruskal是无环图。
先贴挫代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 10005
using namespace std;
int p[maxn],sum;
int set[maxn];
struct node{
int c1;
int c2;
int len;
}q[10*maxn];
int cmp(node q1,node q2)
{
return q1.len>q2.len;
}
int find(int x)
{
if(x!=p[x])
p[x]=find(p[x]);
return p[x];
}
void unions(int x,int y)
{
p[x]=y;
}
int main()
{
//freopen("input.txt","r+",stdin);
int i,n,m,fx,fy;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)break;
memset(set,0,sizeof(set));
sum=0;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&q[i].c1,&q[i].c2,&q[i].len);
}
for(i=0;i<n;i++)
p[i]=i;
sort(q+1,q+m+1,cmp);
for(i=1;i<=m;i++)
{
fx=find(q[i].c1);
fy=find(q[i].c2);
if(fx==fy)
{
if(!set[fx])
{
set[fx]=1;
sum+=q[i].len;
}
continue;
}
if(set[fx]&&set[fy])continue;
if(set[fx]&&!set[fy])
{
unions(fy,fx);
}
else
{
unions(fx,fy);
}
sum+=q[i].len;
}
cout<<sum<<endl;
}
return 0;
}