답안 #77182

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
77182 2018-09-23T16:04:28 Z FiloSanza 꿈 (IOI13_dreaming) C++14
0 / 100
69 ms 14328 KB
#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9;

struct arco_t{
	int a, p;
};

int tmp, maxi, diff;
vector<vector<arco_t>> adj;
vector<int> dist1;
vector<int> dist2;
vector<bool> vis;

void dfs(int node, int father){
	vis[node] = 1;
	for(auto i : adj[node])if(i.a != father){
		dist1[i.a] = dist1[node] + i.p;
		dfs(i.a, node);
		if(tmp < dist1[i.a]){
			tmp = dist1[i.a];
			maxi = i.a;
		}
	}
}

void findCenter(int node, int father){
	for(auto i : adj[node])if(i.a != father){
		dist2[i.a] = dist2[node] + i.p;
		findCenter(i.a, node);
		if(tmp > max(dist1[i.a], dist2[i.a])){
			tmp = max(dist1[i.a], dist2[i.a]);
			maxi = i.a;
		}
	}
}

int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
	adj.resize(N);
	dist1.resize(N);
	dist2.resize(N);
	vis.resize(N, 0);
	for(int i=0; i<M; i++){
		adj[A[i]].push_back({B[i], T[i]});
		adj[B[i]].push_back({A[i], T[i]});
	}
	vector<int> c;
	for(int i=0; i<N; i++){
		if(!vis[i]){
			dist1[i] = 0;
			tmp = 0;
			maxi = i;
			dfs(i, -1);
			tmp = 0;
			dist1[maxi] = 0;
			dfs(maxi, -1);
			c.push_back(maxi);
		}
	}

	
	vector<int> x;
	for(auto i : c){
		maxi = i;
		tmp = INF;
		dist2[i] = 0;
		findCenter(i, -1);
		x.push_back(maxi);
	}


	tmp = 0, maxi = -1;
	for(auto i : x)
		if(tmp < max(dist1[i], dist2[i])){
			tmp = max(dist1[i], dist2[i]);
			maxi = i;
		}

	int ans = 0;
	for(auto i : x)if(i != maxi){
		ans = max(L + tmp + max(dist1[i], dist2[i]), ans);
	}

	return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 69 ms 14328 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 69 ms 14328 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 69 ms 14328 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 35 ms 6184 KB Output is correct
2 Incorrect 34 ms 6272 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 69 ms 14328 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 69 ms 14328 KB Output isn't correct
2 Halted 0 ms 0 KB -