Submission #398807

# Submission time Handle Problem Language Result Execution time Memory
398807 2021-05-04T20:29:30 Z ChrisT Worst Reporter 4 (JOI21_worst_reporter4) C++17
14 / 100
2000 ms 75192 KB
#include <bits/stdc++.h>
using namespace std;
const int MN = 2e5 + 5;
#define lc ind<<1
#define rc ind<<1|1
struct Node { //range add, range set, some kind of walking
	long long mx,alz,slz;
	Node () {mx = alz = 0; slz = -1;}
} tree[MN << 2];
void push_down (int ind, int l, int r) {
	if (tree[ind].slz >= 0) {
		tree[ind].mx = tree[ind].slz;
		if (l != r) {
			tree[lc].slz = tree[rc].slz = tree[ind].slz;
			tree[lc].alz = tree[rc].alz = 0;
		}
		tree[ind].slz = -1;
	}
	if (tree[ind].alz) {
		tree[ind].mx += tree[ind].alz;
		if (l != r) {
			tree[lc].alz += tree[ind].alz;
			tree[rc].alz += tree[ind].alz;
		}
		tree[ind].alz = 0;
	}
}
void update (int ind, int tl, int tr, int l, int r, long long v) {
	push_down(ind,tl,tr);
	if (tl > r || tr < l) return;
	if (l <= tl && tr <= r) {
		tree[ind].alz += v;
		push_down(ind,tl,tr);
		return;
	}
	int mid = (tl + tr) / 2;
	update(lc,tl,mid,l,r,v); update(rc,mid+1,tr,l,r,v);
	tree[ind].mx = max(tree[lc].mx,tree[rc].mx);
}
int walk (int ind, int tl, int tr, long long v) {
	push_down(ind,tl,tr);
	if (tl == tr) return tree[ind].mx > v ? tl : -1;
	int mid = (tl + tr) / 2;
	push_down(lc,tl,mid);
	if (tree[lc].mx > v) return walk(lc,tl,mid,v);
	return walk(rc,mid+1,tr,v);
}
void setv (int ind, int tl, int tr, int l, int r, long long v) {
	push_down(ind,tl,tr);
	if (tl > r || tr < l) return;
	if (l <= tl && tr <= r) {
		tree[ind].slz = v; tree[ind].alz = 0;
		push_down(ind,tl,tr);
		return;
	}
	int mid = (tl + tr) / 2;
	setv(lc,tl,mid,l,r,v); setv(rc,mid+1,tr,l,r,v);
	tree[ind].mx = max(tree[lc].mx,tree[rc].mx);
}
long long query (int ind, int tl, int tr, int i) {
	push_down(ind,tl,tr);
	if (tl == tr) return tree[ind].mx;
	int mid = (tl + tr) / 2;
	if (i <= mid) return query(lc,tl,mid,i);
	return query(rc,mid+1,tr,i);
}
int a[MN], h[MN], c[MN], sz[MN], st[MN], ed[MN], at[MN], big[MN], tt;
vector<int> adj[MN], xs;
int getx (int x) {return lower_bound(xs.begin(),xs.end(),x) - xs.begin() + 1;}
void getsz (int cur) {
	sz[cur] = 1; st[cur] = ++tt; at[tt] = cur;
	for (int i : adj[cur]) {
		getsz(i);
		sz[cur] += sz[i];
		if (sz[i] > sz[big[cur]]) big[cur] = i;
	}
	ed[cur] = tt;
}
vector<pair<int,long long>> dp[MN];
void dfs (int cur, bool del = false) {
	for (int i : adj[cur]) if (i != big[cur]) dfs(i,true);
	if (big[cur]) dfs(big[cur],false);
	for (int i : adj[cur]) if (i != big[cur]) {
		int lst = 1;
		for (auto [j,v] : dp[i]) {
			if (lst <= j) update(1,1,(int)xs.size(),lst,j,v);
			lst = j+1;
		}
	}
	update(1,1,(int)xs.size(),1,(int)xs.size(),c[cur]);
	long long getv = query(1,1,(int)xs.size(),h[cur])-c[cur];
	int pos = walk(1,1,(int)xs.size(),getv);
	if (pos <= h[cur]) setv(1,1,(int)xs.size(),pos,h[cur],getv);
	if (del) {
		vector<int> hs;
		for (int j = st[cur]; j <= ed[cur]; j++) hs.push_back(h[at[j]]);
		hs.push_back((int)xs.size());
		sort(hs.begin(),hs.end());
		hs.erase(unique(hs.begin(),hs.end()),hs.end());
		dp[cur].resize(hs.size());
		for (int i = 0; i < (int)hs.size(); i++) dp[cur][i] = {hs[i],query(1,1,(int)xs.size(),hs[i])};
		tree[1].slz = tree[1].alz = 0;
	}
}
int main () {
	int n; scanf ("%d",&n);
	for (int i = 1; i <= n; i++) {
		scanf ("%d %d %d",&a[i],&h[i],&c[i]);
		xs.push_back(h[i]);
		if (i > 1) adj[a[i]].push_back(i);
	}
	sort(xs.begin(),xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end());
	for (int i = 1; i <= n; i++) h[i] = getx(h[i]);
	getsz(1);
	dfs(1);
	long long ret = 1e18;
	for (auto [j,v] : dp[1]) ret = min(ret,v);
	printf ("%lld\n",query(1,1,(int)xs.size(),1));
	return 0;
}

Compilation message

worst_reporter2.cpp: In function 'int main()':
worst_reporter2.cpp:106:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  106 |  int n; scanf ("%d",&n);
      |         ~~~~~~^~~~~~~~~
worst_reporter2.cpp:108:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  108 |   scanf ("%d %d %d",&a[i],&h[i],&c[i]);
      |   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 15 ms 28492 KB Output is correct
2 Correct 14 ms 28432 KB Output is correct
3 Correct 14 ms 28424 KB Output is correct
4 Correct 14 ms 28536 KB Output is correct
5 Correct 31 ms 29084 KB Output is correct
6 Correct 24 ms 29020 KB Output is correct
7 Correct 20 ms 29064 KB Output is correct
8 Correct 34 ms 29124 KB Output is correct
9 Correct 24 ms 29116 KB Output is correct
10 Correct 20 ms 28940 KB Output is correct
11 Correct 19 ms 28952 KB Output is correct
12 Correct 22 ms 29632 KB Output is correct
13 Correct 18 ms 29644 KB Output is correct
14 Correct 23 ms 29388 KB Output is correct
15 Correct 19 ms 29260 KB Output is correct
16 Correct 37 ms 29316 KB Output is correct
17 Correct 26 ms 29196 KB Output is correct
18 Correct 17 ms 28912 KB Output is correct
19 Correct 23 ms 29268 KB Output is correct
20 Correct 21 ms 29308 KB Output is correct
21 Correct 18 ms 29268 KB Output is correct
22 Correct 25 ms 28992 KB Output is correct
23 Correct 21 ms 29000 KB Output is correct
24 Correct 23 ms 29268 KB Output is correct
25 Correct 21 ms 29272 KB Output is correct
26 Correct 20 ms 29644 KB Output is correct
27 Correct 25 ms 29296 KB Output is correct
28 Correct 24 ms 29316 KB Output is correct
29 Correct 22 ms 29516 KB Output is correct
30 Correct 21 ms 29260 KB Output is correct
31 Correct 22 ms 29388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 31 ms 29192 KB Output is correct
2 Correct 1401 ms 60608 KB Output is correct
3 Correct 686 ms 55524 KB Output is correct
4 Correct 1395 ms 59876 KB Output is correct
5 Correct 670 ms 55808 KB Output is correct
6 Correct 296 ms 49240 KB Output is correct
7 Correct 243 ms 46628 KB Output is correct
8 Correct 469 ms 75192 KB Output is correct
9 Correct 275 ms 74996 KB Output is correct
10 Correct 166 ms 75088 KB Output is correct
11 Correct 557 ms 63384 KB Output is correct
12 Correct 293 ms 61804 KB Output is correct
13 Execution timed out 2077 ms 70304 KB Time limit exceeded
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 28492 KB Output is correct
2 Correct 14 ms 28432 KB Output is correct
3 Correct 14 ms 28424 KB Output is correct
4 Correct 14 ms 28536 KB Output is correct
5 Correct 31 ms 29084 KB Output is correct
6 Correct 24 ms 29020 KB Output is correct
7 Correct 20 ms 29064 KB Output is correct
8 Correct 34 ms 29124 KB Output is correct
9 Correct 24 ms 29116 KB Output is correct
10 Correct 20 ms 28940 KB Output is correct
11 Correct 19 ms 28952 KB Output is correct
12 Correct 22 ms 29632 KB Output is correct
13 Correct 18 ms 29644 KB Output is correct
14 Correct 23 ms 29388 KB Output is correct
15 Correct 19 ms 29260 KB Output is correct
16 Correct 37 ms 29316 KB Output is correct
17 Correct 26 ms 29196 KB Output is correct
18 Correct 17 ms 28912 KB Output is correct
19 Correct 23 ms 29268 KB Output is correct
20 Correct 21 ms 29308 KB Output is correct
21 Correct 18 ms 29268 KB Output is correct
22 Correct 25 ms 28992 KB Output is correct
23 Correct 21 ms 29000 KB Output is correct
24 Correct 23 ms 29268 KB Output is correct
25 Correct 21 ms 29272 KB Output is correct
26 Correct 20 ms 29644 KB Output is correct
27 Correct 25 ms 29296 KB Output is correct
28 Correct 24 ms 29316 KB Output is correct
29 Correct 22 ms 29516 KB Output is correct
30 Correct 21 ms 29260 KB Output is correct
31 Correct 22 ms 29388 KB Output is correct
32 Correct 31 ms 29192 KB Output is correct
33 Correct 1401 ms 60608 KB Output is correct
34 Correct 686 ms 55524 KB Output is correct
35 Correct 1395 ms 59876 KB Output is correct
36 Correct 670 ms 55808 KB Output is correct
37 Correct 296 ms 49240 KB Output is correct
38 Correct 243 ms 46628 KB Output is correct
39 Correct 469 ms 75192 KB Output is correct
40 Correct 275 ms 74996 KB Output is correct
41 Correct 166 ms 75088 KB Output is correct
42 Correct 557 ms 63384 KB Output is correct
43 Correct 293 ms 61804 KB Output is correct
44 Execution timed out 2077 ms 70304 KB Time limit exceeded
45 Halted 0 ms 0 KB -