| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
确实水。0ms#include <iostream>
#include <stdio.h>
using namespace std;
const int MAXINT = 1073741823;
int truncate(int n){
if(n > MAXINT) return MAXINT;
return n;
}
int cishu(int N){
if(N <= 2) return 1;
if(N <= 4) return 2;
if(N <= 8) return 3;
if(N <= 16) return 4;
if(N <= 32) return 5;
if(N <= 64) return 6;
return 7;
}
int main() {
while(1){
int N;
cin >> N;
if(N == 0) return 0;
int cs = cishu(N);
int zdl[2][101][101];
for(int i = 1; i <= N; i++){
for(int j = 1; j <= N; j++){
if(i != j)zdl[0][i][j] = MAXINT;
else zdl[0][i][i] = 0;
}
}
for(int i = 1; i <= N; i++){
int gs;
scanf("%d", &gs);
for(int j = 0; j < gs; j++){
int temp1, temp2;
scanf("%d%d", &temp1, &temp2);
zdl[0][i][temp1] = temp2;
}
}
for(int i = 0; i < cs; i++){
int from, to;
if(i%2 == 0){
from = 0;
to = 1;
}
else{
from = 1;
to = 0;
}
for(int i = 1; i <= N; i++){
for(int j = 1; j <= N; j++){
if(i == j){
zdl[to][i][j] = 0;
continue;
}
int temp = zdl[from][i][j];
for(int k = 1; k <= N; k++){
int ntemp = zdl[from][i][k] + zdl[from][k][j];
if(ntemp < temp) temp = ntemp;
}
zdl[to][i][j] = temp;
}
}
}
int tar = cs%2;
int mn = MAXINT, argmin = 0;
bool can = false;
for(int i = 1; i <= N; i++){
int mx = 0;
for(int j = 1; j <= N; j++){
int val = zdl[tar][i][j];
if(val != MAXINT) can = true;
if(val > mx) mx = val;
}
if(mx < mn){
mn = mx;
argmin = i;
}
}
if(!can){
cout << "disjoint" << endl;
continue;
}
cout << argmin << " " << mn << endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator