zoukankan      html  css  js  c++  java
  • poj 1125 Stockbroker Grapevine(最短路 简单 floyd)

    题目:http://poj.org/problem?id=1125

    题意:给出一个社交网络,每个人有几个别人可以传播谣言,传播谣言需要时间。问要使得谣言传播的最快,应该从那个人开始传播谣言以及使得所有人都知道这个谣言需要多少时间,、

    时间的定义是使得最后一个人知道这个谣言的时间。多元最短路

     

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<stack>
     6 #include<queue>
     7 #include<iomanip>
     8 #include<cmath>
     9 #include<algorithm>
    10 #include<map>
    11 using namespace std;
    12 
    13 const int INF= 1<<28;
    14 int G[150][150],n;
    15 int min_n(int a,int b)
    16 {
    17     return a>b?b:a;
    18 }
    19 void floyd()
    20 {
    21     int i,j,k;
    22     for(k=1; k<=n; k++)
    23         for(i=1; i<=n; i++)
    24             for(j=1; j<=n; j++)
    25                 G[i][j]=min_n(G[i][j],G[i][k]+G[k][j]);
    26 }
    27 int main()
    28 {
    29     int i,j,m,a,b,f,ans,x,y;
    30     while(cin>>n&&n)
    31     {
    32         for(i=1; i<=n; i++)
    33         {
    34             for(j=1; j<=n; j++)
    35                 G[i][j]=INF;
    36             G[i][i]=0;
    37         }
    38         for(i=1; i<=n; i++)
    39         {
    40             cin>>m;
    41             while(m--)
    42             {
    43                 cin>>a>>b;
    44                 if(G[i][a]>b)
    45                     G[i][a]=b;
    46             }
    47         }
    48         floyd();
    49         f = 0; x = INF;
    50         for(i=1; i<=n; i++)
    51         {
    52             ans=-1;
    53             for(j=1; j<=n; j++)
    54             {
    55                 if(G[i][j]>=INF)
    56                    break;
    57                 if(ans<G[i][j])
    58                 ans=G[i][j];
    59             }
    60             if(j==n+1)
    61             {
    62                 f=1;
    63                 if(x>ans)
    64                 {
    65                     x=ans;
    66                     y=i;
    67                 }
    68             }
    69         }
    70         if(f) printf("%d %d
    ",y,x);
    71         else cout<<"disjoint"<<endl;
    72     }
    73     return 0;
    74 }


        即  找一个最长 的

  • 相关阅读:
    简单的C语言编译器--语法分析器
    简单的C语言编译器--词法分析器
    简单的C语言编译器--概述
    最短路径算法
    拓扑排序和关键路径
    图的连通性
    最小生成树
    图的搜索
    gcc O2优化选项对内嵌汇编以及函数递归调用的影响
    gcc 在c代码中内嵌汇编调用c函数: 只是证明曾经我来过
  • 原文地址:https://www.cnblogs.com/bfshm/p/3250343.html
Copyright © 2011-2022 走看看