• poj1125 Stockbroker Grapevine *


    /*
    * 水题~ floyd算法 0ms
    *
    * 求每对顶点间的最短路, 然后选择 最大值 最小的那个顶点作为起点~
    */

    #include
    <cstdio>
    #include
    <cstring>
    using namespace std;

    const int maxN = 100 + 5;
    const int inf = 10000000;
    int n, totEdgeNum, w[maxN][maxN];

    /*
    struct SEdge{
    int u, v, w;
    };
    SEdge edge[maxN * maxN];
    */

    void floyd(){
    for(int k=1; k<=n; k++){
    for(int i=1; i<=n; i++){
    for(int j=1; j<=n; j++){
    if(w[i][j] > w[i][k] + w[k][j])
    w[i][j]
    = w[i][k] + w[k][j];
    }
    }
    }
    }

    void getAns(){
    int totMin = inf, beg;
    for(int i=1; i<=n; i++){
    int lineMax = -1;
    bool flag = 1;
    for(int j=1; j<=n; j++){
    if(w[i][j] == -1){
    flag
    = 0; break;
    }
    if(lineMax < w[i][j]) lineMax = w[i][j];
    }
    if(flag && totMin > lineMax){
    totMin
    = lineMax; beg = i;
    }
    }

    if(totMin == inf)
    printf(
    "disjoint\n");
    else
    printf(
    "%d %d\n", beg, totMin);

    }

    int main(){
    while(scanf("%d", &n)){
    if(n == 0) return 0;

    for(int i=1; i<=n; i++)
    for(int j=1; j<=n; j++)
    w[i][j]
    = inf;

    int tmpN, tmpE, tmpW;
    for(int i=1; i<=n; i++){
    scanf(
    "%d", &tmpN);
    for(int j=1; j<=tmpN; j++){
    scanf(
    "%d%d", &tmpE, &tmpW);
    w[i][tmpE]
    = tmpW;
    }
    w[i][i]
    = 0;
    }

    floyd();

    getAns();
    }

    return 0;
    }
  • 相关阅读:
    Django错误笔记1
    Django学习笔记1 启动及配置一个Django项目
    ubuntu 安装mysqldb
    二叉树 总结
    序列二叉树和反序列 (不是自己做的)
    二叉树的路径
    二叉搜索树的后续遍历
    二叉树层序遍历
    栈的压入 弹出序列
    包含 min的栈
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2165392.html
Copyright © 2020-2023  润新知