답안 #29617

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
29617 2017-07-20T09:00:21 Z ozaslan 꿈 (IOI13_dreaming) C++14
0 / 100
60 ms 10872 KB
#include <stdio.h>
#include <vector>
#include "dreaming.h"
#define MAX_N 100001
#define oo (1<<28)
using namespace std;

vector< pair<int,int> > E[MAX_N];
int ebm, ebm2, ebm3, eb, sayac, en;
int uzak[MAX_N][2], kul[MAX_N];

int DFS(int dugum, int ata) {
	kul[dugum] = 1;

	for (int i = 0; i < E[dugum].size(); i++) {
		int v = E[dugum][i].first, m = E[dugum][i].second;

		if (v != ata) {
			int s = DFS(v, dugum) + m;

			if(s > uzak[dugum][0]) {
				uzak[dugum][1] = uzak[dugum][0];
				uzak[dugum][0] = s;
			}
			else if(s > uzak[dugum][1])
				uzak[dugum][1] = s;
		}
	}
	
//	printf("dugum: %d, ata: %d, uzak0: %d, uzak1: %d\n", dugum, ata,uzak[dugum][0], uzak[dugum][1]);
	return uzak[dugum][0];	
}

void DFS2(int dugum, int ata, int m) {
//printf("Dugum: %d, ata: %d, m: %d, eb: %d, uzak[dugum][0]: %d\n", dugum, ata, m, eb, uzak[dugum][0]);
	
	if (ata != -1)
	if (uzak[ata][0] == uzak[dugum][0] + m) {
		if (uzak[dugum][0] < uzak[ata][1] + m) {
			uzak[dugum][1] = uzak[dugum][0];
			uzak[dugum][0] = uzak[ata][1] + m;
		}
		else if (uzak[dugum][1] < uzak[ata][1] + m)
			uzak[dugum][1] = uzak[ata][1] + m; 
	}
	else {
		uzak[dugum][1] = uzak[dugum][0];
		uzak[dugum][0] = uzak[ata][0] + m;
	}
//printf("Dugum: %d, ata: %d, m: %d, eb: %d, uzak[dugum][0]: %d\n", dugum, ata, m, eb, uzak[dugum][0]);
	for (int i = 0; i < E[dugum].size(); i++) {
		int v = E[dugum][i].first, mm = E[dugum][i].second;
		
		if (v != ata)
			DFS2(v, dugum, mm);
	}

//	printf("Dugum: %d, ata: %d, m: %d, eb: %d, uzak[dugum][0]: %d\n", dugum, ata, m, eb, uzak[dugum][0]);
	eb = min(eb, uzak[dugum][0]);
	en = max(en, uzak[dugum][0]);
}

void merkezleriBul(int N) {

	for (int i = 0; i < N; i++) {
		if (!kul[i]) {
			sayac++;
			eb = oo;
			DFS(i, -1);
			DFS2(i, -1, 0);
		//	printf("%d\n", eb);

			if (eb > ebm) {ebm3 = ebm2; ebm2 = ebm; ebm = eb;}
			else if (eb > ebm2) {ebm3 = ebm2; ebm2 = eb;}
			else if (eb > ebm3) ebm3 = eb;
		}
	}
}

int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
 	
 	for (int i = 0; i < M; i++) {
 		E[ A[i] ].push_back( make_pair(B[i], T[i]) );
  		E[ B[i] ].push_back( make_pair(A[i], T[i]) );
 	}

 	merkezleriBul(N);

 	int sonuc;

 	if(sayac) {
 		sonuc = max(ebm + ebm2 + L, ebm2 + ebm3 + 2*L);
		sonuc = max(sonuc, en);	
	}
	else
		sonuc = en;
	
	return sonuc;
}

/*
#include <stdio.h>
#include <stdlib.h>
#include "dreaming.h"

#define fail(s, x...) do { \
		fprintf(stderr, s "\n", ## x); \
		exit(1); \
	} while(0)

static int A[MAX_N];
static int B[MAX_N];
static int T[MAX_N];

int main() {
	int N, M, L, i;
	int res;

	FILE *f = fopen("sample.in", "r");
	if (!f)
		fail("Failed to open input file.");

	res = fscanf(f, "%d%d%d", &N, &M, &L);
	for (i = 0; i < M; i++)
		res = fscanf(f, "%d%d%d", &A[i], &B[i], &T[i]);
	fclose(f);

	int answer = travelTime(N, M, L, A, B, T);
	printf("%d\n", answer);

	return 0;
}*/

Compilation message

dreaming.cpp: In function 'int DFS(int, int)':
dreaming.cpp:15:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < E[dugum].size(); i++) {
                  ~~^~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'void DFS2(int, int, int)':
dreaming.cpp:37:5: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
  if (ata != -1)
     ^
dreaming.cpp:51:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < E[dugum].size(); i++) {
                  ~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 55 ms 10872 KB Output is correct
2 Correct 60 ms 10588 KB Output is correct
3 Correct 43 ms 9080 KB Output is correct
4 Correct 12 ms 3840 KB Output is correct
5 Correct 9 ms 3456 KB Output is correct
6 Correct 16 ms 4480 KB Output is correct
7 Incorrect 4 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 55 ms 10872 KB Output is correct
2 Correct 60 ms 10588 KB Output is correct
3 Correct 43 ms 9080 KB Output is correct
4 Correct 12 ms 3840 KB Output is correct
5 Correct 9 ms 3456 KB Output is correct
6 Correct 16 ms 4480 KB Output is correct
7 Incorrect 4 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 55 ms 10872 KB Output is correct
2 Correct 60 ms 10588 KB Output is correct
3 Correct 43 ms 9080 KB Output is correct
4 Correct 12 ms 3840 KB Output is correct
5 Correct 9 ms 3456 KB Output is correct
6 Correct 16 ms 4480 KB Output is correct
7 Incorrect 4 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 6144 KB Output is correct
2 Correct 22 ms 6144 KB Output is correct
3 Correct 26 ms 6136 KB Output is correct
4 Correct 25 ms 6136 KB Output is correct
5 Correct 23 ms 6016 KB Output is correct
6 Correct 30 ms 6264 KB Output is correct
7 Correct 25 ms 6244 KB Output is correct
8 Correct 25 ms 6264 KB Output is correct
9 Correct 23 ms 6016 KB Output is correct
10 Correct 26 ms 6144 KB Output is correct
11 Correct 3 ms 2688 KB Output is correct
12 Correct 6 ms 3840 KB Output is correct
13 Correct 6 ms 3840 KB Output is correct
14 Correct 6 ms 3840 KB Output is correct
15 Correct 6 ms 3840 KB Output is correct
16 Correct 6 ms 3712 KB Output is correct
17 Correct 5 ms 3328 KB Output is correct
18 Correct 7 ms 3968 KB Output is correct
19 Correct 6 ms 3840 KB Output is correct
20 Incorrect 4 ms 2688 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 55 ms 10872 KB Output is correct
2 Correct 60 ms 10588 KB Output is correct
3 Correct 43 ms 9080 KB Output is correct
4 Correct 12 ms 3840 KB Output is correct
5 Correct 9 ms 3456 KB Output is correct
6 Correct 16 ms 4480 KB Output is correct
7 Incorrect 4 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 55 ms 10872 KB Output is correct
2 Correct 60 ms 10588 KB Output is correct
3 Correct 43 ms 9080 KB Output is correct
4 Correct 12 ms 3840 KB Output is correct
5 Correct 9 ms 3456 KB Output is correct
6 Correct 16 ms 4480 KB Output is correct
7 Incorrect 4 ms 2688 KB Output isn't correct
8 Halted 0 ms 0 KB -