poj1861 Network
2014-03-24 17:46
204 查看
链接:http://poj.org/problem?id=1861
用kruskal做的。比较简单啦。没什么好说的。
写的过程中知道问题:用C语言写,在运用结构体时,前面一定要加struct!!!
用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; }
相关文章推荐
- POJ-1861-NETWORK 解题报告
- POJ 1861 & ZOJ 1542 Network(最小生成树之Krusal)
- POJ 1861 Network [最小生成树算法MST-kruskal 数据结构-并查集 union-find sets]
- POJ 1861 Network(Kruskal)
- POJ 1861 Network(Kruskal)
- POJ 1861:Network(最小生成树&&kruskal)
- POJ 1861 Network (Kruskal求MST模板题)
- poj 1861 Network 最小生成树
- POJ 1861 Network (Kruskal)
- POJ 1861 Network
- POJ 1861 Network
- poj1861 - Network
- POJ 1861 Network (最短路)
- poj 1861 Network
- poj 1861 Network
- poj 1861 Network[ MST ]
- POJ 1861 Network (Kruskal算法+输出的最小生成树里最长的边==最后加入生成树的边权 *【模板】)
- POJ 1861 Network
- poj 1861 Network (kruskal)
- poj 1861 Network