POJ 1125 Stockbroker Grapevine

来源:互联网 发布:伤害跳跃网络吧 编辑:程序博客网 时间:2024/05/20 06:55
http://poj.org/problem?id=1125

HDU Today

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16490    Accepted Submission(s): 3904


Problem Description
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
 

Input
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
 

Output
如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
 

Sample Input
6xiasha westlakexiasha station 60xiasha ShoppingCenterofHangZhou 30station westlake 20ShoppingCenterofHangZhou supermarket 10xiasha supermarket 50supermarket westlake 10-1
 

Sample Output
50Hint:The best route is:xiasha->ShoppingCenterofHangZhou->supermarket->westlake虽然偶尔会迷路,但是因为有了你的帮助**和**从此还是过上了幸福的生活。――全剧终――
 

Author
lgx
 

Source
ACM程序设计_期末考试(时间已定!!)
 

Recommend
lcy   |   We have carefully selected several similar problems for you:  1217 2680 1142 1385 1690 
大致题意:
证券交易,任务是从所给的人中找一个人,让他以最短的时间将谣言传给所有人,对于第i个人,已经告诉了这个人与其他几个人有关系,以及与这些人传递信息的时间。求这个人,以及传遍所有人要用的最短时间。
思路:最短路模型,显然涉及每两个人之间的最短时间,因此用FLOYD。然后枚举每个人到其他人的最长时间,取他们的最小值就是答案。gaga(注意题目的意思~哎(同时传递))

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<iomanip>
#include<list>
#include<deque>
#include<map>
#include <stdio.h>
#include <queue>

#define maxn 10000+5
#define ull unsigned long long
#define ll long long
#define reP(i,n) for(i=1;i<=n;i++)
#define rep(i,n) for(i=0;i<n;i++)
#define cle(a) memset(a,0,sizeof(a))
#define mod 90001
#define PI 3.141592657
#define INF 1<<25
const ull inf = 1LL << 61;
const double eps=1e-5;

using namespace std;

bool cmp(int a,int b){
return a>b;
}
int n;
int d[110][110];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(cin>>n&&n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{d[i][j]=INF;d[j][i]=INF;}
d[i][i]=0;
}
int a,b,k;
for(int i=1;i<=n;i++)
{
cin>>k;
for(int j=1;j<=k;j++)
{
cin>>a>>b;
if(d[i][a]>b)
d[i][a]=b;
}
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j)continue;
if(d[i][j]>d[i][k]+d[k][j])
d[i][j]=d[i][k]+d[k][j];
}
int Min=INF;
int ans;
//cout<<d[3][1]<<"/";
for(int i=1;i<=n;i++)
{
int Max=0;
for(int j=1;j<=n;j++)
if(i!=j&&d[i][j]>Max)
Max=d[i][j];
if(Max<Min)
{
Min=Max;ans=i;
}
}
cout<<ans<<" "<<Min<<endl;
}
return 0;
}


0 0