hdu 2122 Ice_cream’s world III 最小生成树prim
2016-04-15 21:21
453 查看
题目链接
题意:n个城市,m条路。选出最少里程的若干条路使每个城市都与首都连通。
最小生成树模板题。
题意:n个城市,m条路。选出最少里程的若干条路使每个城市都与首都连通。
最小生成树模板题。
#include <iostream> #include<cstdio> #include<cstring> #include<cmath> #define N 1100 #define INF 0x7ffffff using namespace std; int n,m,v ,mp ,d ; int prim() { for(int i=0;i<n;i++) d[i]=INF,v[i]=0; d[0]=0; for(int i=0;i<n;i++) { int mmin=INF,t; for(int j=0;j<n;j++) if(!v[j]&&mmin>d[j]) mmin=d[t=j]; v[t]=1; for(int j=0;j<n;j++) if(!v[j]&&mp[t][j]<d[j]) d[j]=mp[t][j]; } int ans=0; for(int i=0;i<n;i++) { ans+=d[i]; if(ans>=INF) return -1; } return ans; } int main() { while(~scanf("%d%d",&n,&m)) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) mp[i][j]=INF; for(int i=0;i<m;i++) { int u,v,t; scanf("%d%d%d",&u,&v,&t); if(mp[u][v]>t) mp[u][v]=mp[v][u]=t; } int ans=prim(); if(ans==-1) cout<<"impossible"<<endl; else cout<<ans<<endl; cout<<endl; } }
相关文章推荐
- 算法导论 练习 2.3-1
- HDOJ 1428 漫步校园
- Android:PopupWindow简单弹窗
- 玩的开心
- Sass入门——基本特性-基础
- 第七周学习总结
- NYOJ 1238 最小换乘
- 分数修改
- 【DP】HIHO 1078
- [android]ShareSDK——内容分享和短信验证
- [原创]Cef3 2623.1397 开启ppapi flash插件
- HTML5 localStorage图书阅读器实例
- 剑指offer 面试题19:二叉树的镜像(leetcode226. Invert Binary Tree) 题解
- poj 3255 Roadblocks
- 常用 Git 命令清单
- match()方法与正则子表达式
- javascript中面向对象的三大作用
- Recursive PLS algorithms for adaptive的简单介绍
- 文件分割器,一个读取流,相应多个输出流,并且生成的碎片文件都有有序的编号
- Skinned Mesh 原理解析和一个最简单的实现示例