답안 #960515

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
960515 2024-04-10T14:58:54 Z pcc Election Campaign (JOI15_election_campaign) C++17
30 / 100
1000 ms 40028 KB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pll pair<ll,ll>
#define pii pair<int,int>
#define fs first
#define sc second
#define tlll tuple<ll,ll,ll>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("popcnt,sse4,avx2")


const int mxn = 1e5+10;
int N,Q;

vector<int> tree[mxn];
vector<pair<pii,int>> req[mxn];

namespace HLD{
	int idx[mxn],link_top[mxn],par[mxn],dep[mxn],bs[mxn],sz[mxn];
	ll bit[mxn];
	bitset<mxn> done;
	void modify(int p,ll v){
		done[p] = true;
		bit[p] = bit[p+1]+v;
		return;
		/*
		for(;p<mxn;p+=p&-p)bit[p] += v;
		return;

	   */
	}
	ll getval(int s,int e){
		if(!done[s])return bit[s+1]-bit[e+1];
		return bit[s]-bit[e+1];
		/*
		int re = 0;
		for(;e>0;e-= e&-e)re += bit[e];
		s--;
		for(;s>0;s-= s&-s)re -= bit[s];
		return re;

	   */
	}
	int cnt = 0;
	void dfs1(int now){
		sz[now] = 1;
		for(auto nxt:tree[now]){
			if(nxt == par[now])continue;
			par[nxt] = now;
			dep[nxt] = dep[now]+1;
			dfs1(nxt);
			if(!bs[now]||sz[bs[now]]<sz[nxt])bs[now] = nxt;
		}
		return;
	}
	void dfs2(int now,int top){
		idx[now] = ++cnt;
		link_top[now] = top;
		if(bs[now])dfs2(bs[now],top);
		for(auto nxt:tree[now]){
			if(nxt == par[now]||nxt == bs[now])continue;
			dfs2(nxt,nxt);
		}
		return;
	}
	pll LCA(int a,int b){
		pll re = pll(0,0);
		int ta = link_top[a],tb = link_top[b];
		while(ta != tb){
			if(dep[ta]<dep[tb]){
				swap(a,b);
				swap(ta,tb);
			}
			re.sc += getval(idx[ta],idx[a]);
			a = par[ta];ta = link_top[a];
		}
		if(idx[a]>idx[b])swap(a,b);
		re.sc += getval(idx[a],idx[b]);
		re.fs = a;
		return re;
	}
}

namespace CALC{
	ll ans = 0;
	ll sum[mxn],dp[mxn];
	void dfs(int now){
		sort(tree[now].begin(),tree[now].end(),[](int a,int b){return HLD::idx[a]>HLD::idx[b];});
		for(auto nxt:tree[now]){
			if(nxt == HLD::par[now])continue;
			dfs(nxt);
			sum[now] += dp[nxt];
		}
		dp[now] = max(dp[now],sum[now]);
		for(auto &i:req[now]){
			auto [a,b] = i.fs;
			int w = i.sc;
			ll ts = sum[now]+HLD::LCA(a,b).sc+w;
			dp[now] = max(dp[now],ts);
		}
		HLD::modify(HLD::idx[now],sum[now]-dp[now]);
	}
	void GO(){
		dfs(1);
		cout<<dp[1]<<'\n';
		return;
	}
}

int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>N;
	for(int i = 1;i<N;i++){
		int a,b;
		cin>>a>>b;
		tree[a].push_back(b);
		tree[b].push_back(a);
	}
	HLD::dfs1(1);
	HLD::dfs2(1,1);
	cin>>Q;
	while(Q--){
		int a,b,c;
		cin>>a>>b>>c;
		int h = HLD::LCA(a,b).fs;
		req[h].push_back(make_pair(pii(a,b),c));
	}
	CALC::GO();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7516 KB Output is correct
2 Correct 2 ms 7516 KB Output is correct
3 Correct 2 ms 7516 KB Output is correct
4 Correct 2 ms 7516 KB Output is correct
5 Correct 37 ms 13036 KB Output is correct
6 Correct 48 ms 37996 KB Output is correct
7 Correct 48 ms 29260 KB Output is correct
8 Correct 30 ms 12624 KB Output is correct
9 Correct 44 ms 21328 KB Output is correct
10 Correct 30 ms 12624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7536 KB Output is correct
3 Correct 2 ms 7772 KB Output is correct
4 Correct 82 ms 40028 KB Output is correct
5 Correct 80 ms 40020 KB Output is correct
6 Correct 77 ms 39852 KB Output is correct
7 Correct 75 ms 40020 KB Output is correct
8 Correct 75 ms 39896 KB Output is correct
9 Correct 70 ms 39900 KB Output is correct
10 Correct 68 ms 39868 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7512 KB Output is correct
2 Correct 2 ms 7536 KB Output is correct
3 Correct 2 ms 7772 KB Output is correct
4 Correct 82 ms 40028 KB Output is correct
5 Correct 80 ms 40020 KB Output is correct
6 Correct 77 ms 39852 KB Output is correct
7 Correct 75 ms 40020 KB Output is correct
8 Correct 75 ms 39896 KB Output is correct
9 Correct 70 ms 39900 KB Output is correct
10 Correct 68 ms 39868 KB Output is correct
11 Correct 6 ms 8280 KB Output is correct
12 Correct 83 ms 39988 KB Output is correct
13 Correct 89 ms 39976 KB Output is correct
14 Correct 69 ms 39820 KB Output is correct
15 Correct 79 ms 39952 KB Output is correct
16 Correct 73 ms 40020 KB Output is correct
17 Correct 68 ms 39764 KB Output is correct
18 Correct 79 ms 40016 KB Output is correct
19 Correct 76 ms 39952 KB Output is correct
20 Correct 68 ms 39944 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 114 ms 14596 KB Output is correct
2 Correct 69 ms 39908 KB Output is correct
3 Execution timed out 1014 ms 22488 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7516 KB Output is correct
2 Correct 2 ms 7516 KB Output is correct
3 Correct 2 ms 7516 KB Output is correct
4 Correct 2 ms 7516 KB Output is correct
5 Correct 37 ms 13036 KB Output is correct
6 Correct 48 ms 37996 KB Output is correct
7 Correct 48 ms 29260 KB Output is correct
8 Correct 30 ms 12624 KB Output is correct
9 Correct 44 ms 21328 KB Output is correct
10 Correct 30 ms 12624 KB Output is correct
11 Correct 2 ms 7516 KB Output is correct
12 Correct 2 ms 7772 KB Output is correct
13 Correct 2 ms 7772 KB Output is correct
14 Correct 3 ms 7516 KB Output is correct
15 Correct 2 ms 7608 KB Output is correct
16 Correct 2 ms 7772 KB Output is correct
17 Correct 2 ms 7516 KB Output is correct
18 Correct 3 ms 7772 KB Output is correct
19 Correct 2 ms 7512 KB Output is correct
20 Correct 2 ms 7772 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 7516 KB Output is correct
2 Correct 2 ms 7516 KB Output is correct
3 Correct 2 ms 7516 KB Output is correct
4 Correct 2 ms 7516 KB Output is correct
5 Correct 37 ms 13036 KB Output is correct
6 Correct 48 ms 37996 KB Output is correct
7 Correct 48 ms 29260 KB Output is correct
8 Correct 30 ms 12624 KB Output is correct
9 Correct 44 ms 21328 KB Output is correct
10 Correct 30 ms 12624 KB Output is correct
11 Correct 2 ms 7512 KB Output is correct
12 Correct 2 ms 7536 KB Output is correct
13 Correct 2 ms 7772 KB Output is correct
14 Correct 82 ms 40028 KB Output is correct
15 Correct 80 ms 40020 KB Output is correct
16 Correct 77 ms 39852 KB Output is correct
17 Correct 75 ms 40020 KB Output is correct
18 Correct 75 ms 39896 KB Output is correct
19 Correct 70 ms 39900 KB Output is correct
20 Correct 68 ms 39868 KB Output is correct
21 Correct 6 ms 8280 KB Output is correct
22 Correct 83 ms 39988 KB Output is correct
23 Correct 89 ms 39976 KB Output is correct
24 Correct 69 ms 39820 KB Output is correct
25 Correct 79 ms 39952 KB Output is correct
26 Correct 73 ms 40020 KB Output is correct
27 Correct 68 ms 39764 KB Output is correct
28 Correct 79 ms 40016 KB Output is correct
29 Correct 76 ms 39952 KB Output is correct
30 Correct 68 ms 39944 KB Output is correct
31 Correct 114 ms 14596 KB Output is correct
32 Correct 69 ms 39908 KB Output is correct
33 Execution timed out 1014 ms 22488 KB Time limit exceeded
34 Halted 0 ms 0 KB -