POJ 1125 Stockbroker Grapevine

来源:互联网 发布:软件开发外派怎么样 编辑:程序博客网 时间:2024/05/18 03:57

题目链接

题意:求谣言传递的最短时间。

分析:floyd,之后找最短时间就可以了

#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 105#define inf 0x3f3f3f3fusing namespace std;int n;int dp[MAX_N][MAX_N];void warshall_floyd(){    for(int k=1;k<=n;k++)    {        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++)            dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);        }    }}int main(void){    while(scanf("%d",&n)==1)    {        if(n==0)        break;        for(int i=1;i<=n;i++)        {            for(int j=1;j<=n;j++)            {                if(i==j)                dp[i][j]=0;                else                dp[i][j]=inf;            }        }        for(int i=1;i<=n;i++)        {            int num;            scanf("%d",&num);            while(num--)            {                int a,b;                scanf("%d%d",&a,&b);                dp[i][a]=b;            }        }        warshall_floyd();        int ans=inf;        int s=-1;        bool ok=false;        for(int i=1;i<=n;i++)        {            int r=-1;            int j;            for(j=1;j<=n;j++)            {                r=max(r,dp[i][j]);            }            if(ans>r)            {                ans=r;                s=i;            }        }        if(s!=-1)        printf("%d %d\n",s,ans);        else        printf("disjoint\n");    }    return 0;}
0 0
原创粉丝点击