#include<iostream>
using namespace std;
int dist[110][110],n;
int MAX,I;
void inti()
{
int i,j;
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
dist[i][j]=1010;
for(i=0;i<=n;i++)
dist[i][i]=0;
}
int max(int i)
{
int j,m;
m=dist[i][1];
for(j=1;j<=n;j++)
if(dist[i][j]>m)
m=dist[i][j];
return m;
}
void flod()
{
int i,j,k,min,temp;
for(k=1;k<=n;k++) //k必须要放在最外层,DP的思想,这个想了好久才明白
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(dist[i][j]>dist[i][k]+dist[k][j])
dist[i][j]=dist[i][k]+dist[k][j];
min=max(1),temp=1; //没有初始化
for(i=1;i<=n;i++)
{
if(min>max(i))
{
min=max(i);
temp=i;
}
}
MAX=min; I=temp;
}
int main()
{
int m,a,b,i,j;
while(cin>>n&&n)
{
inti();
for(i=0;i<n;i++)
{
cin>>m;
for(j=0;j<m;j++)
{
cin>>a>>b;
dist[i+1][a]=b;
}
}
flod();
cout<<I<<" "<<MAX<<endl;
}
}
poj 1125 floyd
最新推荐文章于 2020-07-01 00:14:53 发布