POJ 1125 Stockbroker Grapevine

解题思路: 首先Floyd算法求出所有顶点之间的最小距离,计算最小最大距离

#include <iostream>
using namespace std;

#define MaxNum 1e8

int main()
{
int p[105][105];
int dist[105];
int n, m, v, t, start, minTime;
while (cin >> n && n)
{

fill(
&p[0][0], &p[104][104], MaxNum);
for (int i = 1; i <= n; i++)
{
p[i][i]
= 0;
cin
>> m;
while(m--)
{
cin
>> v >> t;
p[i][v]
= t;
}
}

for (int k = 1; k <= n; k++)
for (int i = 0; i <= n; i++)
for (int j = 0; j <= n; j++)
if (p[i][j] > p[i][k] + p[k][j])
p[i][j]
= p[i][k] + p[k][j];

minTime
= MaxNum;
for (int i = 1; i <= n; i++)
{
int maxTime = 0;
for (int j = 1; j <= n; j++)
if (maxTime < p[i][j])
maxTime
= p[i][j];
if(minTime > maxTime)
{
minTime
= maxTime;
start
= i;
}
}
if (minTime == MaxNum)
cout
<< "disjoint"<<endl;
else
cout
<< start<< " " << minTime << endl;
}
return 0;
}

 

posted on 2010-11-05 12:11  ltang  阅读(226)  评论(0编辑  收藏  举报

导航