您的位置:首页 > 其它

poj1861 Network

2014-03-24 17:46 204 查看
链接:http://poj.org/problem?id=1861

用kruskal做的。比较简单啦。没什么好说的。

写的过程中知道问题:用C语言写,在运用结构体时,前面一定要加struct!!!

#include<stdio.h>
#include<stdlib.h>
#define MAXE 15005
#define MAXN 1005
int n,m;
int ans,maxdis;
struct Edges
{
int a;
int b;
int c;
};
struct Edges edge[MAXE];
struct Edges use[MAXN];
int cmp(const void *r,const void *t)
{
return (*(struct Edges*)r).c-(*(struct Edges*)t).c;
}

int find(int x,int *set)
{
int r=x;
while(set[r]!=r)
r=set[r];
return r;
}

void kruskal()
{
int set[MAXN],i,j;
for(i=1;i<=n;i++)
set[i]=i;
i=0;
j=0;
while(i<n-1&&j<m)
{
int v1=find(edge[j].a,set);
int v2=find(edge[j].b,set);
if(v1!=v2)
{
set[v1]=v2;
use[ans]=edge[j];
if(edge[j].c>maxdis)
maxdis=edge[j].c;
ans++;
i++;
}
j++;
}
return ;
}

int main()
{
int i;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<m;i++)
scanf("%d%d%d",&edge[i].a,&edge[i].b,&edge[i].c);
qsort(edge,m,sizeof(struct Edges),cmp);
//for(i=0;i<m;i++)
// printf("%d\n",edge[i].c);
ans=0;
maxdis=0;
kruskal();
printf("%d\n",maxdis);
printf("%d\n",ans);
for(i=0;i<ans;i++)
printf("%d %d\n",use[i].a,use[i].b);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: