poj1125 Stockbroker Grapevine
来源:互联网 发布:matlab中优化目标函数 编辑:程序博客网 时间:2024/05/19 16:20
链接:http://poj.org/problem?id=1125
题意:找到能最快把谣言传给所有人的那个人,然后再给出最后一个得知谣言的人所需最短的时间。如果不能传达,输出"disjoint"。
浅谈:若有n个Stockbroker,把每个Stockbroker作为一个源点,用Dijkstra求源点到各个点的最短路,然后求出最大的,这样操作n次。然后在n个最大值中选取最小值即(最后一个得知谣言的人所需最短的时间),时间复杂度为O(n^3)。这个我又用Floyd做了一下。一直不想用Floyd,是因为当初看Floyd时被它的路径存取吓到了,所以一直对它略有恐惧。但其实求最短路的过程Floyd是相当简单的,反而比Dijkstra简单多了。这次是因为看到很多人说用Floyd做最为简单,所以也想试一试。然后回到这个题,其实原理是一样的。区别在于Floyd的路径压缩只进行一次。接下来的操作与Dijkstar一样。把其中每个点作为源点搜一下最大值。最后再找其中的最小值。
//Dijkstra#include<iostream>#define eMAX 105#define INF 100using namespace std;int edge[eMAX][eMAX];int st_num,ed_num;int dist[100];int Dijkstra(int v){ int s[eMAX];int i,j,tmin,tmax=0;for(i=1;i<=st_num;i++){ dist[i]=edge[v][i]; s[i]=0;}dist[v]=0;s[v]=1;for(i=1;i<st_num;i++){ tmin=1000; int u=v; for(j=1;j<=st_num;j++) { if(!s[j]&&dist[j]<tmin){ tmin=dist[j]; u=j; } } s[u]=1; for(j=1;j<=st_num;j++) if(!s[j]&&edge[u][j]>0) { if(dist[j]>edge[u][j]+dist[u]) { dist[j]=dist[u]+edge[u][j]; } }}for(i=1;i<=st_num;i++){if(!s[i])return 0;else if(dist[i]>tmax)tmax=dist[i];}return tmax;}int main(){int n,m,i,j;int b,t,maxtime=INF,start;while(cin>>n){ if(!n)return 0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) edge[i][j]=INF; ed_num=0; st_num=n; for(i=1;i<=n;i++) { cin>>m;for(j=1;j<=m;j++){ cin>>b>>t; edge[i][b]=t; ed_num++;} } for(i=1;i<=st_num;i++) { t=Dijkstra(i); if(t>0&&t<maxtime) { maxtime=t; start=i; } } if(maxtime<INF)cout<<start<<" "<<maxtime<<endl; else cout<<"disjoint"<<endl;} return 0;}
- POJ1125 Stockbroker Grapevine
- POJ1125 Stockbroker Grapevine
- poj1125 Stockbroker Grapevine
- poj1125 - Stockbroker Grapevine
- POJ1125--Stockbroker Grapevine
- POJ1125 Stockbroker Grapevine
- poj1125 Stockbroker Grapevine
- poj1125--Stockbroker Grapevine
- POJ1125 Stockbroker Grapevine 【Floyd】
- POJ1125 Stockbroker Grapevine
- POJ1125 - Stockbroker Grapevine
- POJ1125 Stockbroker Grapevine【Floyd】
- POJ1125 Stockbroker Grapevine
- POJ1125 Stockbroker Grapevine
- POJ1125 Stockbroker Grapevine
- poj1125 Stockbroker Grapevine
- [POJ1125]-Stockbroker Grapevine
- POJ1125-Stockbroker Grapevine
- Objective -C语言基础知识(总结篇)
- oracle的基本操作命令
- 【笔记】(java7)的流的缓冲大小。Swing。
- linux can 总线socket接口测试使用 2012-02-14 14:12:59
- 利用DES加密算法保护Java源代码
- poj1125 Stockbroker Grapevine
- asm磁盘创建提示“Marking disk "VOL1" as an ASM disk: [FAILED]”
- 68. 把一切都置于版本控制之下
- 在Linux环境下安装并使用DNW进行文件下载
- 已更新或删除的行值不能使该行成为唯一行
- Android 添加系统服务
- Sample 3.9:fltadd.cpp
- 解决"Could not reserve enough space for object heap"
- 全局变量、局部变量、静态全局变量、静态局部变量的区别