제출 #784806

#제출 시각아이디문제언어결과실행 시간메모리
784806acatmeowmeow꿈 (IOI13_dreaming)C++11
100 / 100
55 ms18224 KiB
#include "dreaming.h"
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e5;
int dp[NMAX];
vector<pair<int, int>> adj[NMAX], ans;

void dfs(int u, int e, int&maxlen) {
	int f = 0, se = 0;
	dp[u] = 0;
	for (auto&x : adj[u]) {
		int v = x.first, c = x.second;
		if (v == e) continue;
		dfs(v, u, maxlen);
		dp[u] = max(dp[u], dp[v] + c);
		if (f < dp[v] + c) se = f, f = dp[v] + c;
		else se = max(se, dp[v] + c);
	}
	maxlen = max(maxlen, f + se);
}

void dfs2(int u, int e, int&curlen) {
	int f = 0, se = 0;
	if (curlen > dp[u]) curlen = dp[u];
	for (auto&x : adj[u]) {
		int v = x.first, c = x.second;
		if (f < dp[v] + c) se = f, f = dp[v] + c;
		else se = max(se, dp[v] + c);
	}
	for (auto&x : adj[u]) {
		int v = x.first, c = x.second;
		if (v == e) continue;
		int curU = dp[u], curV = dp[v];
		if (dp[v] + c != f) dp[u] = f;
		else dp[u] = se;
		dp[v] = max(dp[v], dp[u] + c);
		dfs2(v, u, curlen);
		dp[u] = curU, dp[v] = curV;
	}
}

int travelTime(int N, int M, int L, int A[], int B[], int T[]) {
	for (int i = 0; i < N; i++) dp[i] = -1;
	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]});
	}
	int maxlen = 0, f = -1e9, se = -1e9, thi = -1e9;
	for (int i = 0; i < N; i++) {
		if (dp[i] != -1) continue;
		dfs(i, 0, maxlen);
		int curlen = 1e9;
		dfs2(i, 0, curlen);
		if (curlen > f) thi = se, se = f, f = curlen;
		else if (curlen > se) thi = se, se = curlen;
		else thi = max(thi, curlen);
	}
	return  max({maxlen, f + L + se, se + 2*L + thi});
}

/*#define MAX_N 100000

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

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

	//res = fscanf(f, "%d%d%d", &N, &M, &L);
	cin >> N >> M >> L;
	for (i = 0; i < M; i++) cin >> A[i] >> B[i] >> T[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);
	cout << answer << '\n';

	return 0;
}*/

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...