poj 1125
来源:互联网 发布:背六级英语单词的软件 编辑:程序博客网 时间:2024/06/04 09:01
题目大意:(我就不翻译原来的题目)大概讲的是这么个东西。
给出几个点以及点到其他点的单向边。现在假设有一个消息要传给所有人,我们认为每个点到其他点传递消息的时间为边的长度。现在所求的是:从那个点出发所需的时间最少,并且求出这个最小值。
还是最短路径问题:求出每个点到其他点的最短路径(floyd算法),之后枚举每个点,求出这个点要把消息传遍的最长的时间,找出时间最短的点,很简单。
#include <iostream>#include <cstring>#define N 700using namespace std;int dis[N][N];int n,m;int main(){while(1){cin>>n;if(n==0)break;for (int i=0;i<N;++i) for (int j=0;j<N;++j) dis[i][j]=99999999; for (int i=1;i<=n;++i) { cin>>m; int v=0,d; for (int j=1;j<=m;++j) { cin>>v>>d; dis[i][v]=d;}dis[i][i]=0;}for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) for (int k=1;k<=n;++k) //Floyd dis[i][k]=min( dis[i][j]+dis[j][k] , dis[i][k]); int ans=99999999+1,k=-1;for (int i=1;i<=n;++i){int cnt=0;for (int j=1;j<=n;++j)cnt=max(dis[i][j],cnt); //枚举点求最小 if(cnt<ans){ans=cnt;k=i;}}cout<<k<<' '<<ans<<endl;}}
这是第一次,第一次直接ac的题目!!!!
当然我发现自己floyd写得不是很顺,三个循环把自己搞晕了。
for (int k=0;k<n;++k)
for (int i=0;i<n;++i)
for (int j=0;j<n;++j)
d[i][j]=min(d[i][k]+d[k][j],d[i][j]);
//从第i个点到第j个点以k为中间点所需的最短距离
//第一个循环枚举的是中间点
//第二个循环枚举的是当前中间点下的起始点
//第三个循环美剧的是目标。
仔细想想为什么不能换。
0 0
- POJ 1125
- poj-1125
- poj 1125
- poj 1125
- POJ 1125
- POJ 1125
- poj 1125
- poj 1125
- POJ 1125
- poj 1125
- POJ 1125
- poj-1125
- poj 1125
- poj 1125
- poj 1125
- poj 1125
- POJ 1125
- poj 1125
- 结合源码探讨WMS与AMS建立连接的桥梁—appWindowToken
- FragmentTransaction的commit和commitAllowingStateLoss的区别
- Guava中的Optional来表达null
- hdoj FatMouse' Trade 1009 (多重背包)
- HttpURLConnection-Get方法实现
- poj 1125
- HTTP:好好理解HTTP协议---字节写HTTP协议
- VMware虚拟机中安装好了VMware Tools,针对Ubantu操作系统
- jquery实现页面局部刷新
- hdoj 偶数求和 2015 (简单数学题)
- JsonModel的使用
- iOS推送消息怎么实现icon图标的数字累加
- poj 2188 Cow Laundry 求逆序数水题
- redis 动态添加移除节点