poj:1125Floyd(求任意点之间的最短路)
2016-08-17 20:45
344 查看
题目大意:
给出每个人之间的关系,只有在朋友之间才可以传递信息,问选择哪一个人为起点可以在最短的时间内让所有人得知消息,输出人的编号和最短时间;如果不行则输出disjoint;
思路:
由于是求任意点之间最短路问题,我们可以用Floyd算法;
先求出任意点之间的最短路,然后枚举每一种情况,求其到其他点的最大值,然后求这些值当中的最小值;
给出每个人之间的关系,只有在朋友之间才可以传递信息,问选择哪一个人为起点可以在最短的时间内让所有人得知消息,输出人的编号和最短时间;如果不行则输出disjoint;
思路:
由于是求任意点之间最短路问题,我们可以用Floyd算法;
先求出任意点之间的最短路,然后枚举每一种情况,求其到其他点的最大值,然后求这些值当中的最小值;
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define inf 0x3f3f3f3f int p[109][109]; int main() { int n; while(scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i==j) p[j][i]=0; else p[i][j]=inf; } for(int i=1;i<=n;i++) { int m,v,val; scanf("%d",&m); for(int j=1;j<=m;j++) { scanf("%d%d",&v,&val); p[i][v]=val; } } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) p[i][j]=min(p[i][j],p[i][k]+p[k][j]); int aim=0,ans=inf; for(int i=1;i<=n;i++) { int tmp=0; for(int j=1;j<=n;j++) { tmp=max(tmp,p[i][j]); } if(ans>tmp) { ans=tmp; aim=i; } } if(aim) printf("%d %d\n",aim,ans); else puts("disjoint"); } return 0; }
相关文章推荐
- spring入门(二)【加载properties文件】
- js设计模式-单例模式
- Android的ListView之优化1
- Docker:搭建tomcat+mysql+web+nginx运行环境
- 图像金字塔与图像缩放
- 基于opencv的物体定位
- poj1266Cover an Arc.(三角形的外心)
- 备忘:maven 错误信息: Plugin execution not covered by lifecycle configuration
- POJ 1155 TELE(树形DP 水)
- openvz实现的honeypot
- 算术表达式的语法分析及语义分析程序设计 —— LR分析法、输出三元式(续)
- 【JZOJ4710】Value
- 学习Looper,handle后感
- zzulioj-1919-D【二分】
- 二叉搜索树的下一个结点
- 【易语言界面开发系列教程之(EX_UI使用系列教程 ——1-8节)】
- 爬虫小程序-爬取知乎推荐编辑文章内容
- js继承
- JavaScript == VS ===
- js的弹性运动