| ||||||||||
| 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 | |||||||||
H2O题就是好,1次AC【1172K 0ms】#include <iostream>
#include <stdio.h>
using namespace std;
int MIN(int a, int b){
return a>b ? b : a;
}
int MAX(int a, int b){
return a>b ? a : b;
}
int main() {
int N,M, cnt = 0;
while(1){
cnt ++;
scanf("%d%d", &N, &M);
if(N == 0 && M == 0) return 0;
printf("System #%d\n", cnt);
if(N == 1){
printf("The last domino falls after 0.0 seconds, at key domino 1.\n\n");
continue;
}
int edges[502][502];
for(int i = 1; i <= N; i++){
for(int j = 1; j <= N; j++){
edges[i][j] = -1;
//-1表示不连
}
}
for(int i = 0; i < M; i++){
int I, J, L;
scanf("%d%d%d", &I, &J, &L);
edges[I][J] = L;
edges[J][I] = L;
}
//开始dijkstra
int dist[502];
dist[1] = 0;
for(int i = 2; i <= N; i++) dist[i] = 2147483647;
bool in[502] = {0};
int numCnt = N;
while(numCnt > 0){
int min = 2147483647;
int arg = -1;
for(int i = 1; i <= N; i++){
if(in[i]) continue;
if(dist[i] < min){
min = dist[i];
arg = i;
}
}
dist[arg] = min;
in[arg] = true;
numCnt --;
for(int i = 1; i <= N; i++){
if(in[i]) continue;
if(edges[arg][i] == -1) continue;
if(min + edges[arg][i] < dist[i]){
dist[i] = min + edges[arg][i];
}
}
}
double mx = 0;
int argmax = 1;
for(int i = 2; i <= N; i++){
if(dist[i] > mx){
mx = dist[i];
argmax = i;
}
}
double maxz = 0;
int arg1 = -1, arg2 = -1;
for(int i = 1; i <= N; i++){
for(int j = 1; j <= N; j++){
if(edges[i][j] == -1) continue;
double temp = (dist[i] + dist[j] + edges[i][j])/2.0;
if(temp > maxz){
maxz = temp;
arg1 = MIN(i,j);
arg2 = MAX(i,j);
}
}
}
if(mx >= maxz){
printf("The last domino falls after %.1lf seconds, at key domino %d.\n\n", mx, argmax);
}
else{
printf("The last domino falls after %.1lf seconds, between key dominoes %d and %d.\n\n", maxz, arg1, arg2);
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator