POJ 1125 Stockbroker Grapevine
这个题很水,后台数据相当弱,写这个只是记录一下。
再次吐槽一下,那个不联通的情况(输出“disjoint”)甚至都不用输出,输出错了也没事。。
用的Foyld, 0MS;
贴一下代码:
#include <stdio.h> #include <math.h> const int inf=1<<30; const int V=105; int in=1; int map1[V][V]; int min(int a, int b) { if(a<=b) return a; return b; } void flody(int n) { int i,j,k; for(k=1; k<=n; k++) { for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(map1[i][k]!=inf&&map1[k][j]!=inf&&map1[i][j]>map1[i][k]+map1[k][j]) { map1[i][j]=map1[i][k]+map1[k][j]; } } } } } int main() { int n; while(scanf("%d",&n),n) { int i,j,t,a,b,min1,mini,flat,max1; for(i=0; i<=n; i++) { for(j=0; j<=n; j++) { map1[i][j]=inf; if(i==j) { map1[i][j]=0; } } } for(i=0; i<n; i++) { scanf("%d",&t); for(j=0; j<t; j++) { scanf("%d%d",&a,&b); map1[i+1][a]=b; } } flody(n); min1=inf; for(i=1; i<=n; i++) { max1=0; for(j=1;j<=n;j++) { if(map1[i][j]>max1) { max1=map1[i][j]; } } if(max1<min1) { min1=max1; mini=i; } } if(min1==inf) { printf("disjoint\n"); } else { printf("%d %d\n",mini,min1); } } return 0; }