Submission #980541

# Submission time Handle Problem Language Result Execution time Memory
980541 2024-05-12T08:29:25 Z happy_node Worst Reporter 4 (JOI21_worst_reporter4) C++17
79 / 100
278 ms 59216 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int MX=2e5+5;
int N;
int A[MX],H[MX],C[MX];

vector<int> adj[MX];

multiset<pair<ll,ll>> dp[MX];
int par[MX];

int find(int v) {
	return par[v]==v?v:par[v]=find(par[v]);
}

void merge(int u, int v) {
	u=find(u),v=find(v);
	if(u==v) return;

	if(dp[u].size()>dp[v].size()) swap(u,v);

	for(auto [pos,val]:dp[u]) {
		dp[v].insert({pos,val});
	}

	par[u]=v;
	dp[u].clear();
}

void dfs(int v) {
	int prv=-1;
	for(auto u:adj[v]) {
		dfs(u);
		if(prv!=-1) 
			merge(u,prv);
		prv=u;
	}

	if(prv!=-1) merge(v,prv);

	int pv=find(v);

	auto it=dp[pv].lower_bound(make_pair(H[v],0));

	if(it==dp[pv].begin()) {
		dp[pv].insert(make_pair(H[v],C[v]));
	} else {
		it--;
		ll cur=C[v];
		while(true) {
			if(cur>=it->second) {
 				cur-=it->second;
				it=dp[pv].erase(it);
				if(it==dp[pv].begin()) break;
				it--;
			} else {
				auto [p,q]=*it;
				dp[pv].erase(it);
				dp[pv].insert({p,q-cur});
				cur=0;
				break;
			}
		}
		dp[pv].insert(make_pair(H[v],C[v]));
	}
}

int onstk[MX],degs[MX];
vector<int> stk;

void dfs0(int v) {
	onstk[v]=1;
	stk.push_back(v);

	if(onstk[A[v]]==0) {
		dfs0(A[v]);
	} else if(onstk[A[v]]==1) {
		sort(stk.begin(),stk.end(),[&](int i, int j){
			return H[i]>H[j];
		});

		for(int i=0;i+1<stk.size();i++) {
			A[stk[i+1]]=stk[i];
		}
		A[stk[0]]=stk[0];
	}

	stk.pop_back();
	onstk[v]=2;
}

int main() {
	cin.tie(0); ios_base::sync_with_stdio(0);

	cin>>N;
	ll sum=0;
	for(int i=1;i<=N;i++) {
		cin>>A[i]>>H[i]>>C[i];
		sum+=C[i];
	}

	for(int i=1;i<=N;i++) {
		if(onstk[i]==2) continue;
		dfs0(i);
	}

	// for(int i=1;i<=N;i++) {
	// 	cout<<A[i]<<" -> "<<i<<'\n';
	// }

	for(int i=1;i<=N;i++) {
		if(A[i]!=i) {
			adj[A[i]].push_back(i);
			degs[i]+=1;
		}
	}

	for(int i=1;i<=N;i++) par[i]=i;

	ll ans=0;
	for(int i=1;i<=N;i++) {
		if(degs[i]==0) {
			dfs(i);
			for(auto [pos,val]:dp[find(i)]) 
				ans+=val;
		}
	}

	cout<<sum-ans<<'\n';
}

Compilation message

worst_reporter2.cpp: In function 'void dfs0(int)':
worst_reporter2.cpp:85:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |   for(int i=0;i+1<stk.size();i++) {
      |               ~~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 4 ms 16728 KB Output is correct
2 Correct 4 ms 16744 KB Output is correct
3 Correct 3 ms 16732 KB Output is correct
4 Correct 3 ms 16880 KB Output is correct
5 Correct 7 ms 17244 KB Output is correct
6 Correct 7 ms 17248 KB Output is correct
7 Correct 7 ms 17244 KB Output is correct
8 Correct 7 ms 17252 KB Output is correct
9 Correct 7 ms 17244 KB Output is correct
10 Correct 8 ms 17244 KB Output is correct
11 Correct 7 ms 17500 KB Output is correct
12 Correct 7 ms 17756 KB Output is correct
13 Correct 7 ms 17756 KB Output is correct
14 Correct 6 ms 17500 KB Output is correct
15 Correct 6 ms 17500 KB Output is correct
16 Correct 7 ms 17244 KB Output is correct
17 Correct 7 ms 17244 KB Output is correct
18 Correct 8 ms 17544 KB Output is correct
19 Correct 6 ms 17496 KB Output is correct
20 Correct 7 ms 17500 KB Output is correct
21 Correct 7 ms 17656 KB Output is correct
22 Correct 6 ms 17244 KB Output is correct
23 Correct 6 ms 17244 KB Output is correct
24 Correct 6 ms 17592 KB Output is correct
25 Correct 7 ms 17612 KB Output is correct
26 Correct 6 ms 17756 KB Output is correct
27 Correct 6 ms 17500 KB Output is correct
28 Correct 6 ms 17496 KB Output is correct
29 Correct 6 ms 17756 KB Output is correct
30 Correct 6 ms 17756 KB Output is correct
31 Correct 6 ms 17756 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 16728 KB Output is correct
2 Correct 4 ms 16744 KB Output is correct
3 Correct 3 ms 16732 KB Output is correct
4 Correct 3 ms 16880 KB Output is correct
5 Correct 7 ms 17244 KB Output is correct
6 Correct 7 ms 17248 KB Output is correct
7 Correct 7 ms 17244 KB Output is correct
8 Correct 7 ms 17252 KB Output is correct
9 Correct 7 ms 17244 KB Output is correct
10 Correct 8 ms 17244 KB Output is correct
11 Correct 7 ms 17500 KB Output is correct
12 Correct 7 ms 17756 KB Output is correct
13 Correct 7 ms 17756 KB Output is correct
14 Correct 6 ms 17500 KB Output is correct
15 Correct 6 ms 17500 KB Output is correct
16 Correct 7 ms 17244 KB Output is correct
17 Correct 7 ms 17244 KB Output is correct
18 Correct 8 ms 17544 KB Output is correct
19 Correct 6 ms 17496 KB Output is correct
20 Correct 7 ms 17500 KB Output is correct
21 Correct 7 ms 17656 KB Output is correct
22 Correct 6 ms 17244 KB Output is correct
23 Correct 6 ms 17244 KB Output is correct
24 Correct 6 ms 17592 KB Output is correct
25 Correct 7 ms 17612 KB Output is correct
26 Correct 6 ms 17756 KB Output is correct
27 Correct 6 ms 17500 KB Output is correct
28 Correct 6 ms 17496 KB Output is correct
29 Correct 6 ms 17756 KB Output is correct
30 Correct 6 ms 17756 KB Output is correct
31 Correct 6 ms 17756 KB Output is correct
32 Correct 7 ms 17244 KB Output is correct
33 Correct 232 ms 37608 KB Output is correct
34 Correct 234 ms 36348 KB Output is correct
35 Correct 211 ms 35384 KB Output is correct
36 Correct 224 ms 36692 KB Output is correct
37 Correct 230 ms 38728 KB Output is correct
38 Correct 252 ms 37612 KB Output is correct
39 Correct 150 ms 53308 KB Output is correct
40 Correct 141 ms 53332 KB Output is correct
41 Correct 141 ms 56424 KB Output is correct
42 Correct 123 ms 40784 KB Output is correct
43 Correct 132 ms 40964 KB Output is correct
44 Correct 207 ms 37352 KB Output is correct
45 Correct 232 ms 37408 KB Output is correct
46 Correct 278 ms 41816 KB Output is correct
47 Correct 160 ms 44472 KB Output is correct
48 Correct 188 ms 48364 KB Output is correct
49 Correct 184 ms 49060 KB Output is correct
50 Correct 145 ms 34752 KB Output is correct
51 Correct 134 ms 34640 KB Output is correct
52 Correct 171 ms 45060 KB Output is correct
53 Correct 188 ms 48924 KB Output is correct
54 Correct 85 ms 53200 KB Output is correct
55 Correct 129 ms 46516 KB Output is correct
56 Correct 122 ms 54596 KB Output is correct
57 Correct 126 ms 58600 KB Output is correct
58 Correct 151 ms 59192 KB Output is correct
59 Correct 149 ms 59216 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 16728 KB Output is correct
2 Correct 4 ms 16744 KB Output is correct
3 Correct 3 ms 16732 KB Output is correct
4 Correct 3 ms 16880 KB Output is correct
5 Correct 7 ms 17244 KB Output is correct
6 Correct 7 ms 17248 KB Output is correct
7 Correct 7 ms 17244 KB Output is correct
8 Correct 7 ms 17252 KB Output is correct
9 Correct 7 ms 17244 KB Output is correct
10 Correct 8 ms 17244 KB Output is correct
11 Correct 7 ms 17500 KB Output is correct
12 Correct 7 ms 17756 KB Output is correct
13 Correct 7 ms 17756 KB Output is correct
14 Correct 6 ms 17500 KB Output is correct
15 Correct 6 ms 17500 KB Output is correct
16 Correct 7 ms 17244 KB Output is correct
17 Correct 7 ms 17244 KB Output is correct
18 Correct 8 ms 17544 KB Output is correct
19 Correct 6 ms 17496 KB Output is correct
20 Correct 7 ms 17500 KB Output is correct
21 Correct 7 ms 17656 KB Output is correct
22 Correct 6 ms 17244 KB Output is correct
23 Correct 6 ms 17244 KB Output is correct
24 Correct 6 ms 17592 KB Output is correct
25 Correct 7 ms 17612 KB Output is correct
26 Correct 6 ms 17756 KB Output is correct
27 Correct 6 ms 17500 KB Output is correct
28 Correct 6 ms 17496 KB Output is correct
29 Correct 6 ms 17756 KB Output is correct
30 Correct 6 ms 17756 KB Output is correct
31 Correct 6 ms 17756 KB Output is correct
32 Correct 7 ms 17244 KB Output is correct
33 Correct 232 ms 37608 KB Output is correct
34 Correct 234 ms 36348 KB Output is correct
35 Correct 211 ms 35384 KB Output is correct
36 Correct 224 ms 36692 KB Output is correct
37 Correct 230 ms 38728 KB Output is correct
38 Correct 252 ms 37612 KB Output is correct
39 Correct 150 ms 53308 KB Output is correct
40 Correct 141 ms 53332 KB Output is correct
41 Correct 141 ms 56424 KB Output is correct
42 Correct 123 ms 40784 KB Output is correct
43 Correct 132 ms 40964 KB Output is correct
44 Correct 207 ms 37352 KB Output is correct
45 Correct 232 ms 37408 KB Output is correct
46 Correct 278 ms 41816 KB Output is correct
47 Correct 160 ms 44472 KB Output is correct
48 Correct 188 ms 48364 KB Output is correct
49 Correct 184 ms 49060 KB Output is correct
50 Correct 145 ms 34752 KB Output is correct
51 Correct 134 ms 34640 KB Output is correct
52 Correct 171 ms 45060 KB Output is correct
53 Correct 188 ms 48924 KB Output is correct
54 Correct 85 ms 53200 KB Output is correct
55 Correct 129 ms 46516 KB Output is correct
56 Correct 122 ms 54596 KB Output is correct
57 Correct 126 ms 58600 KB Output is correct
58 Correct 151 ms 59192 KB Output is correct
59 Correct 149 ms 59216 KB Output is correct
60 Correct 3 ms 16732 KB Output is correct
61 Incorrect 4 ms 16732 KB Output isn't correct
62 Halted 0 ms 0 KB -