HDU Jungle Roads 1301 最小生成树、
2012-08-06 20:56
375 查看
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1301
题目大意:输入一个n,表示有n个村庄,然后下面是n-1行,每行开头有两个代表字母和数字,分别表示 起始点和与其相同的村庄的个数。然后就是与其相同的村庄和道路长度,求最小连通值。
代码
View Code
题目大意:输入一个n,表示有n个村庄,然后下面是n-1行,每行开头有两个代表字母和数字,分别表示 起始点和与其相同的村庄的个数。然后就是与其相同的村庄和道路长度,求最小连通值。
代码
View Code
#include<stdio.h> #include<string.h> #include<stdlib.h> int map[30][30]; int vis[30]; int prim(int n) { int ans = 0; int d[30]; memset(vis,0,sizeof(vis)); int i,j,pos,min; vis[1] = 1; for(i = 2;i <= n;i++) d[i] = map[1][i]; for(i =1;i < n;i++) { min = 0x7fffffff; for(j = 2;j <= n;j++) { if(min > d[j] && !vis[j]) min = d[j],pos = j; } ans += min; vis[pos] = 1; for(j = 2;j <= n;j++) if(d[j] > map[pos][j] && !vis[j]) d[j] = map[pos][j]; } return ans; } int main() { int n,i,j,m,count,val,ans; char s[5],d[5]; while(scanf("%d",&n)&&n) { for(i = 1;i <= n;i++) for(j = 1;j <= n;j++) map[i][j] = 0x7fffffff; for(i = 0;i < n-1;i++) { scanf("%s %d",s,&count); while(count--) { scanf("%s %d",d,&val); map[s[0]-'A'+1][d[0]-'A'+1] = map[d[0]-'A'+1][s[0]-'A'+1] = val; } } ans = prim(n); printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu1301——Jungle Roads——最小生成树
- Jungle Roads HDU - 1301 (最小生成树 prim)
- (step6.1.6)hdu 1301(Jungle Roads——最小生成树)
- 杭电1301--Jungle Roads(最小生成…
- [HDU] 1301 Jungle Roads-赤裸裸的最小生成树
- HDU 1301 &POJ 1215 Jungle Roads【最小生成树,Prime算法+Kruskal算法】
- HDU 1301-Jungle Roads (Kruscal 最小生成树)
- HDU 1301 Jungle Roads 最小生成树(简单)
- HDU(1301)最小生成树
- hdu 1301 Jungle Roads(最小生成树kruskal)
- HDU 1301 Jungle Roads(裸最小生成树)
- HDU 1301 Jungle Roads (最小生成树) By-小宇
- HDU 1301 Jungle Roads(最小生成树Kruskal)
- HDU-1301 Jungle Roads(最小生成树[Prim])
- HDU 1301 Jungle Roads (最小生成树)kruskal
- HDU 1301 Jungle Roads Kruskal求解
- HDU 1301 最小生成树,以及最小生成树的学习
- hdu 1301(最小生成树)
- HDU-1301 Jungle Roads 并查集/最小生成数
- HDU 1301 Jungle Roads (最小生成树/模板题)