답안 #787993

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
787993 2023-07-19T15:54:36 Z allin27x 꿈 (IOI13_dreaming) C++17
18 / 100
159 ms 43324 KB
#include <bits/stdc++.h>
using namespace std;
#include "dreaming.h"

int ds[2][(int)1e5];
unordered_map<int,int> adj[(int)1e5];
int vis[(int)1e5];
int ind = 0;
unordered_set<int> sets[(int)1e5];
int cp[(int)1e5];

void dfs(int i , int p, int len, int x){
	sets[ind].insert(i);
	vis[i] = 1;
	ds[x][i] = len;
	for (auto const &pair: adj[i]){
		int c = pair.first; int w= pair.second;
		if (c==p) continue;
		dfs(c,i, len+w,x);
	}
}

int travelTime(int N, int M, int L, int A[], int B[], int T[]){
	for (int i=0; i<M; i++){
		int a = A[i]; int b = B[i];
		adj[a][b] = T[i]; adj[b][a] = T[i];
	}
	int r;
	for (int i=0; i<N; i++){
		if (vis[i]) continue;
		dfs(i,i,0,0);
		int a1 = i;
		for (auto c: sets[ind]){
			if (ds[0][c]>ds[0][a1]) a1 = c;
		}
		dfs(a1,a1,0,0);
		int a2 = a1;
		r = a1;
		for (auto c: sets[ind]){
			if (ds[0][c]>ds[0][a2]) a2 = c;
		}
		dfs(a2,a2,0,1);
		int ans = 1e7;
		for (auto c: sets[ind]){
			ans = min(ans, max(ds[0][c], ds[1][c]));
		}
		cp[ind] = ans;
		ind++;
	}
	if (ind == 1){
		int s = r;
		for (int c=0; c<N; c++){
			if (ds[0][c]>ds[0][s]) s = c;
		}
		return ds[0][s];
	}
	sort(cp, cp+ind);
	if (ind ==2 ) return L + cp[ind-1] + cp[ind-2];
	return max(L + cp[ind-1] + cp[ind-2], 2*L + cp[ind-2] + cp[ind-3]);
}

// int main(){
// 	int n = 12; int m = 8 ;
// 	int l = 2;
// 	int a[] = {0, 8, 2, 5, 5, 1, 1, 10};
// 	int b[] = {8, 2, 7, 11, 1, 3, 9, 6};
// 	int t[] = {4, 2, 4, 3, 7, 1, 5, 3};
// 	cout<<travelTime(n,m,l,a,b,t);
// }

Compilation message

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:55:17: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized]
   55 |   return ds[0][s];
      |                 ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 159 ms 43324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 11220 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 159 ms 43324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 31424 KB Output is correct
2 Correct 54 ms 31524 KB Output is correct
3 Correct 54 ms 31536 KB Output is correct
4 Correct 57 ms 31512 KB Output is correct
5 Correct 66 ms 31500 KB Output is correct
6 Correct 64 ms 32716 KB Output is correct
7 Correct 58 ms 32436 KB Output is correct
8 Correct 56 ms 31188 KB Output is correct
9 Correct 65 ms 30940 KB Output is correct
10 Correct 56 ms 32204 KB Output is correct
11 Correct 6 ms 11220 KB Output is correct
12 Correct 23 ms 26940 KB Output is correct
13 Correct 25 ms 27012 KB Output is correct
14 Correct 26 ms 26928 KB Output is correct
15 Correct 23 ms 26916 KB Output is correct
16 Correct 22 ms 26836 KB Output is correct
17 Correct 23 ms 26832 KB Output is correct
18 Correct 24 ms 27060 KB Output is correct
19 Correct 23 ms 26892 KB Output is correct
20 Correct 7 ms 11280 KB Output is correct
21 Correct 5 ms 11220 KB Output is correct
22 Correct 6 ms 11700 KB Output is correct
23 Correct 24 ms 26960 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 11220 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 159 ms 43324 KB Output isn't correct
2 Halted 0 ms 0 KB -