Submission #112628

#TimeUsernameProblemLanguageResultExecution timeMemory
112628maruiiFactories (JOI14_factories)C++14
Compilation error
0 ms0 KiB
#include "factories.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
#define ff first
#define ss second
const ll INF = 1e15;

int dfn[500005], dfnn, efn[500005], prt[19][500005];
int dep[500005];
ll D[500005];
vector<pii> edge[500005];

void dfs0(int x, int p) {
	dfn[x] = ++dfnn;
	for (auto i : edge[x]) {
		if (i.ss == p) continue;
		dep[dfnn + 1] = dep[dfn[x]] + 1;
		D[dfnn + 1] = D[dfn[x]] + i.ff;
		prt[0][dfnn + 1] = dfn[x];
		dfs0(i.ss, x);
	}
	efn[dfn[x]] = dfnn;
}

int C[1000005], cnt, pv, XY[500005];
ll res;

pll dfs(int x) {
	ll S = INF, T = INF;
	if (XY[x] == 1) S = 0;
	if (XY[x] == 2) T = 0;
	XY[x] = 0;
	while (pv < cnt && C[pv] <= efn[x]) {
		int i = C[pv++];
		auto r = dfs(i);
		S = min(S, r.ff + D[i] - D[x]);
		T = min(dp[x][1], r.ss + D[i] - D[x]);
	}
	res = min(res, S+T);
	return pll(S, T);
}

int lca(int s, int e) {
	if (dep[s] < dep[e]) swap(s, e);
	for (int i = 18; i >= 0; --i)
		if ((dep[s] - dep[e] >> i) & 1) s = prt[i][s];
	if (s == e) return s;
	for (int i = 18; i >= 0; --i)
		if (prt[i][s] != prt[i][e]) s = prt[i][s], e = prt[i][e];
	return prt[0][s];
}

ll Query(int S, int X[], int T, int Y[]) {
	cnt = 0;
	for (int i = 0; i < S; ++i) C[cnt] = dfn[X[i]], XY[C[cnt++]] = 1;
	for (int i = 0; i < T; ++i) C[cnt] = dfn[Y[i]], XY[C[cnt++]] = 2;
	sort(C, C + cnt);
	for (int i = cnt-1; i; --i) C[cnt++] = lca(C[i - 1], C[i]);
	sort(C, C + cnt);
	cnt = unique(C, C + cnt) - C;
	res = INF, pv = 0;
	dfs(1);
	return res;
}

void Init(int N, int A[], int B[], int D[]) {
	for (int i = 0; i < N - 1; ++i) {
		edge[A[i]].emplace_back(D[i], B[i]);
		edge[B[i]].emplace_back(D[i], A[i]);
	}
	dfs0(0, 0);
	for (int i = 1; i < 19; ++i) for (int j = 1; j <= N; ++j) prt[i][j] = prt[i - 1][prt[i - 1][j]];
}

Compilation message (stderr)

factories.cpp: In function 'pll dfs(int)':
factories.cpp:40:11: error: 'dp' was not declared in this scope
   T = min(dp[x][1], r.ss + D[i] - D[x]);
           ^~
factories.cpp:40:11: note: suggested alternative: 'dep'
   T = min(dp[x][1], r.ss + D[i] - D[x]);
           ^~
           dep
factories.cpp: In function 'int lca(int, int)':
factories.cpp:49:15: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   if ((dep[s] - dep[e] >> i) & 1) s = prt[i][s];
        ~~~~~~~^~~~~~~~