//Floyd method, very very simple #include<iostream> using namespace std; const int MAX=20; int main(){ int t,n,num,tmp_time,tmp_min,time[101][101],Min,Order; bool disjoint; while(cin>>t&&t){ disjoint=false; Min=99999; for(int i=0;i<t;i++) for(int j=0;j<t;j++){ if(i==j) time[i][j]=0; else time[i][j]=MAX; } for(int i=0;i<t;i++){ cin>>n; for(int j=0;j<n;j++){ cin>>num>>tmp_time; num--; if(time[i][num]>tmp_time) time[i][num]=tmp_time; } } for(int v=0;v<t;v++) for(int i=0;i<t;i++) for(int j=0;j<t;j++){ if(time[i][j]>time[i][v]+time[v][j]) time[i][j]=time[i][v]+time[v][j]; } for(int i=0;i<t;i++){ tmp_min=0; for(int j=0;j<t;j++){ if(tmp_min<time[i][j]) tmp_min=time[i][j]; } if(tmp_min<Min){ Min=tmp_min; Order=i; } } if(Min<MAX) cout<<Order+1<<" "<<Min<<endl; else if(Min==MAX) cout<<"disjoint"<<endl; } system("pause"); return 0; }
poj 1125Stockbroker Grapevine水题Floyd算法
最新推荐文章于 2024-07-12 18:56:03 发布