Submission #56838

# Submission time Handle Problem Language Result Execution time Memory
56838 2018-07-12T19:57:06 Z Mamnoon_Siam Election Campaign (JOI15_election_campaign) C++17
0 / 100
1000 ms 38268 KB
//#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include <bits/stdc++.h>
using namespace std;

#define debug(s) cout<< #s <<" = "<< s <<endl
#define all(v) (v).begin(), (v).end()
#define KeepUnique(v) (v).erase( unique(all(v)), v.end() )
#define MEMSET(a,val) memset(a, val, sizeof a)
#define PB push_back
#define endl '\n'
typedef long long ll;

inline int myrand(int l, int r) {
	int ret = rand(); ret <<= 15; ret ^= rand();
	if(ret < 0) ret = -ret; ret %= (r-l+1); ret += l;
	return ret;
}
template <typename F, typename S>
ostream& operator << (ostream& os, const pair< F, S>& p) {
    return os<<"(" <<p.first<<", "<<p.second<<")"; }

typedef pair<int, int> ii;
template<typename T> using min_pq =
	priority_queue<T, vector<T>, greater<T> >;

//int dx[] = {-1, +0, +1, +0};
//int dy[] = {+0, +1, +0, -1};

const int maxn = 100005;

int n, m;
vector<int> g[maxn];
int lvl[maxn];
vector<int> paths[maxn];
vector<int> A, B, C;
vector<int> shitz[maxn], pathnodes[maxn];
int t[18][maxn];
int dp[maxn];
ll S[maxn];
int ch[maxn];

int dfs(int u, int par) {
	t[0][u] = par;
	lvl[u] = par == -1 ? 0 : lvl[par] + 1;
	for(int v : g[u]) {
		if(par - v) {
			dfs(v, u);
		}
	}
}

int __lca(int u, int v) {
	if(lvl[u] > lvl[v]) swap(u, v);
	int d = lvl[v] - lvl[u];
	for(int i = 16; i >= 0; i--) {
		if(d & (1 << i)) {
			v = t[i][v];
		}
	}
	if(u == v) return u;
	for(int i = 16; i >= 0; i--) {
		if(t[i][u] != t[i][v]) {
			u = t[i][u];
			v = t[i][v];
		}
	} return t[0][u];
}

int pathcost(int i) {
	int lca = __lca(A[i], B[i]);
	int ret = 0;
	for(int u : pathnodes[i]) {
		ret += S[u];
	}
	return ret;
}

void prep(int u, int par) {
	for(int v : g[u]) {
		if(v - par) {
			prep(v, u);
		}
	}
	for(int v : g[u]) {
		if(v - par) {
			S[u] += dp[v];
		}
	}
	dp[u] = 0;
	for(int p : paths[u]) {
		int ret = C[p] + pathcost(p);
		dp[u] = max(dp[u], ret);
	}
	int temp = 0;
	for(int v : g[u]) {
		if(v - par) temp += dp[v];
	}
	dp[u] = max(dp[u], temp);

	S[u] -= dp[u];
}

int32_t main () {
	// freopen("in", "r", stdin);
	cin >> n;
	for(int i = 1; i < n; i++) {
		int u, v; cin >> u >> v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	MEMSET(t, -1);
	MEMSET(ch, -1);
	dfs(1, -1);
	for(int p = 1; p <= 16; p++) {
		for(int i = 1; i <= n; i++) {
			int mid = t[p - 1][i];
			if(mid != -1) t[p][i] = t[p - 1][mid];
		}
	}
	cin >> m;
	A.resize(m), B.resize(m), C.resize(m);
	for(int i = 0; i < m; i++) {
		cin >> A[i] >> B[i] >> C[i];
		int lca = __lca(A[i], B[i]);
		paths[lca].push_back(i);
	}
	for(int i = 0; i < m; i++) {
		int lca = __lca(A[i], B[i]), now;
		now = A[i];
		set<int> st;
		while(now != lca) {
			st.insert(now);
			now = t[0][now];
		}
		now = B[i];
		while(now != lca) {
			st.insert(now);
			now = t[0][now];
		}
		st.insert(lca);
		set<int> All;
		for(int u : st) {
			for(int v : g[u]) {
				All.insert(v);
			}
		}
		for(int b : st) {
			pathnodes[i].push_back(b);
		}
		for(int u : st) {
			All.erase(u);
		}
		if(t[0][lca] != -1) {
			All.erase(t[0][lca]);
		}
		for(int u : All) {
			shitz[i].push_back(u);
		}
	}
	prep(1, -1);
	cout << dp[1] << endl;
}

Compilation message

election_campaign.cpp: In function 'int myrand(int, int)':
election_campaign.cpp:17:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
  if(ret < 0) ret = -ret; ret %= (r-l+1); ret += l;
  ^~
election_campaign.cpp:17:26: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
  if(ret < 0) ret = -ret; ret %= (r-l+1); ret += l;
                          ^~~
election_campaign.cpp: In function 'int dfs(int, int)':
election_campaign.cpp:52:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
election_campaign.cpp: In function 'int pathcost(int)':
election_campaign.cpp:72:6: warning: unused variable 'lca' [-Wunused-variable]
  int lca = __lca(A[i], B[i]);
      ^~~
# Verdict Execution time Memory Grader output
1 Correct 14 ms 17144 KB Output is correct
2 Correct 15 ms 17252 KB Output is correct
3 Correct 14 ms 17252 KB Output is correct
4 Correct 16 ms 17356 KB Output is correct
5 Correct 133 ms 22144 KB Output is correct
6 Correct 159 ms 31852 KB Output is correct
7 Correct 370 ms 31852 KB Output is correct
8 Correct 322 ms 31852 KB Output is correct
9 Execution timed out 1080 ms 31852 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 18 ms 31852 KB Output is correct
2 Correct 17 ms 31852 KB Output is correct
3 Correct 27 ms 31852 KB Output is correct
4 Execution timed out 1079 ms 38268 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 18 ms 31852 KB Output is correct
2 Correct 17 ms 31852 KB Output is correct
3 Correct 27 ms 31852 KB Output is correct
4 Execution timed out 1079 ms 38268 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1061 ms 38268 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 14 ms 17144 KB Output is correct
2 Correct 15 ms 17252 KB Output is correct
3 Correct 14 ms 17252 KB Output is correct
4 Correct 16 ms 17356 KB Output is correct
5 Correct 133 ms 22144 KB Output is correct
6 Correct 159 ms 31852 KB Output is correct
7 Correct 370 ms 31852 KB Output is correct
8 Correct 322 ms 31852 KB Output is correct
9 Execution timed out 1080 ms 31852 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 14 ms 17144 KB Output is correct
2 Correct 15 ms 17252 KB Output is correct
3 Correct 14 ms 17252 KB Output is correct
4 Correct 16 ms 17356 KB Output is correct
5 Correct 133 ms 22144 KB Output is correct
6 Correct 159 ms 31852 KB Output is correct
7 Correct 370 ms 31852 KB Output is correct
8 Correct 322 ms 31852 KB Output is correct
9 Execution timed out 1080 ms 31852 KB Time limit exceeded
10 Halted 0 ms 0 KB -