POJ1125 Stockbroker Grapevine

来源:互联网 发布:淘宝全球购手机 编辑:程序博客网 时间:2024/05/16 17:41

 题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1125

 思路:佛洛依德算法,求出每对点的最短距离。最后枚举每行(即每个人),找每个人最大的,所有人中最小的。

 

  1. import java.io.BufferedInputStream;
  2. import java.io.IOException;
  3. import java.util.Scanner;
  4. public class Main {
  5.     final static int MAXVALUE = 10000000;
  6.     public static void main(String[] args) throws NumberFormatException,
  7.             IOException {
  8.         Scanner read = new Scanner(new BufferedInputStream(System.in));
  9.         int t, num;
  10.         int[][] p;
  11.         int min, max, start;
  12.         while ((t = read.nextInt()) != 0) {
  13.             p = new int[t][t];
  14.             for (int i = 0; i < t; i++) {
  15.                 for (int j = 0; j < t; j++) {
  16.                     p[i][j] = MAXVALUE;
  17.                 }
  18.             }
  19.             for (int i = 0; i < t; i++) {
  20.                 p[i][i] = 0;
  21.             }
  22.             for (int i = 0; i < t; i++) {
  23.                 num = read.nextInt();
  24.                 for (int j = 0; j < num; j++) {
  25.                     p[i][read.nextInt() - 1] = read.nextInt();
  26.                 }
  27.             }
  28.             for (int k = 0; k < t; k++) {
  29.                 for (int i = 0; i < t; i++) {
  30.                     for (int j = 0; j < t; j++) {
  31.                         if (p[i][j] > p[i][k] + p[k][j]) {
  32.                             p[i][j] = p[i][k] + p[k][j];
  33.                         }
  34.                     }
  35.                 }
  36.             }
  37.             min = Integer.MAX_VALUE;
  38.             start = -1;
  39.             loop: for (int i = 0; i < t; i++) {
  40.                 max = Integer.MIN_VALUE;
  41.                 for (int j = 0; j < t; j++) {
  42.                     if (p[i][j] == MAXVALUE) {
  43.                         continue loop;
  44.                     } else {
  45.                         max = Math.max(max, p[i][j]);
  46.                     }
  47.                 }
  48.                 if (max < min) {
  49.                     min = max;
  50.                     start = i;
  51.                 }
  52.             }
  53.             if (start != -1) {
  54.                 System.out.println((start + 1) + " " + min);
  55.             } else {
  56.                 System.out.println("disjoint");
  57.             }
  58.         }
  59.     }
  60. }
原创粉丝点击