#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<vector> #include<stack> #include<map> using namespace std; const int INF=30; //infó?15£?10e8??wa£?ó?20£?302?ac const int MAXN=110; int lc[MAXN][MAXN]; void floyd_output(int n) { for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) lc[i][j]=min(lc[i][j],lc[i][k]+lc[k][j]); int maxn,minn=INF,st; for(int i=1;i<=n;i++) { maxn=0; for(int j=1;j<=n;j++) { if(i!=j&&maxn<lc[i][j]) maxn=lc[i][j]; //求i……j最长路径,比如从i点到j点(i不等于j),取最长的时间,因为散播是从i点向其他各点同时开始进行的,具有共时性,故应求最长时间 } if(minn>maxn) { minn=maxn; st=i; } } if(minn<INF) printf("%d %d\n",st,minn); else printf("disjoint\n"); } int main() { int n; while(scanf("%d",&n)&&n) { memset(lc,INF,sizeof(lc)); for(int u=1;u<=n;u++) { int cnt,v,t; scanf("%d",&cnt); while(cnt--) { scanf("%d%d",&v,&t); lc[u][v]=t; } } floyd_output(n); } return 0; }
POJ 1125 Stockbroker Grapevine(Floyd)
原文:http://www.cnblogs.com/atmacmer/p/5196904.html