HDU 1863 畅通工程 最下生成树问题
2013-07-30 20:08
295 查看
题目描述:给出图,要你求是否存在最小生成树,如果存在,要求输出最小权值和,如果不存在,输出?
解题报告:又是一个最裸的克鲁斯卡尔,并且要判断是否存在最小生成树的问题。废话不多说,给个短代码:
View Code
解题报告:又是一个最裸的克鲁斯卡尔,并且要判断是否存在最小生成树的问题。废话不多说,给个短代码:
#include<cstdio> #include<algorithm> const int MAX = 100+5; int N,M,prim[MAX]; int find(int k) { return prim[k]==k? k:prim[k] = find(prim[k]); } struct node { int x,y,length; }rode[MAX]; int cmp(node a,node b) { return a.length<b.length; } int main() { while(scanf("%d%d",&N,&M),N) { for(int i = 0;i<N;++i) scanf("%d%d%d",&rode[i].x,&rode[i].y,&rode[i].length); std::sort(rode,rode+N,cmp); for(int i = 1;i<=M;++i) prim[i] = i; int sum = 0; for(int i = 0;i<N;++i) if(find(rode[i].x) != find(rode[i].y)) { prim[find(rode[i].x)] = find(rode[i].y); sum+=rode[i].length; } bool flag = 0; for(int i = 2;i<=M;++i) if(find(i) != find(1)) { flag = 1; break; } if(flag) { printf("?\n"); continue; } printf("%d\n",sum); } return 0; }
View Code
相关文章推荐
- hdu 1863 畅通工程 (最小生成树)
- HDU1863 畅通工程 【最小生成树Prim】
- HDU 1863 畅通工程【最小生成树,Prime算法+Kuruskal算法】
- HDU 1863 畅通工程 最短路径问题 (Kruskal&Prim)
- hdu--1863畅通工程2(典型的最小生成树)prim算法
- hdu-1863畅通工程 最小生成树克鲁斯卡尔算法kruskal(并查集实现)&&prim普利姆算法实现
- HDU 1863 畅通工程 prim算法 最小生成树
- D - 畅通工程 HDU - 1863 (最小生成树)
- hdu 1863 畅通工程 最小生成树+并查集
- HDU-1863-畅通工程【最小生成树】
- HDU 1863 畅通工程(prim最小生成树)
- hdu1863 畅通工程(最小生成树)
- HDU1863 畅通工程 【图论】【最小生成树】
- 畅通工程系列问题题解(HDU 1233 1863 1875 1879)
- 畅通工程 hdu 1863 最小生成树+并查集 浙大计算机研究生复试上机考试-2007年
- HDU-1863 畅通工程(最小生成树[Prim])
- HDU 1863 畅通工程 (克鲁斯卡尔—最小生成树)
- HDU 1863 畅通工程 (最小生成树--Kruscal、Prim)
- HDU1863 畅通工程 最小生成树
- 【HDU 1863】畅通工程(最小生成树-水题)