Submission #418921

# Submission time Handle Problem Language Result Execution time Memory
418921 2021-06-06T08:45:52 Z ryansee Worst Reporter 4 (JOI21_worst_reporter4) C++14
14 / 100
2000 ms 173864 KB
#include "bits/stdc++.h"
using namespace std;

#define FAST ios_base::sync_with_stdio(false); cin.tie(0);
#define pb push_back
#define eb emplace_back
#define ins insert
#define f first
#define s second
#define cbr cerr<<"hi\n"
#define mmst(x, v) memset((x), v, sizeof ((x)))
#define siz(x) ll(x.size())
#define all(x) (x).begin(), (x).end()
#define lbd(x,y) (lower_bound(all(x),y)-x.begin())
#define ubd(x,y) (upper_bound(all(x),y)-x.begin())
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
inline long long rand(long long x, long long y) { return rng() % (y+1-x) + x; } //inclusive
string inline to_string(char c) {string s(1,c);return s;} template<typename T> inline T gcd(T a,T b){ return a==0?llabs(b):gcd(b%a,a); }

using ll=long long;
using ld=long double;
#define FOR(i,s,e) for(ll i=s;i<=ll(e);++i)
#define DEC(i,s,e) for(ll i=s;i>=ll(e);--i)
using pi=pair<ll,ll>; using spi=pair<ll,pi>; using dpi=pair<pi,pi>; 

long long LLINF = 1e18;
int INF = 1e9+1e6;
#define MAXN (200006)
ll n, mx, P[MAXN], A[MAXN], C[MAXN], ans;
bitset<MAXN> vis, in;
vector<int> stk, cy;
vector<int> v[MAXN];
void cycle(int x) {
	vis[x]=1;
	stk.eb(x);
	if(!vis[P[x]]) cycle(P[x]);
	else {
		while(1) {
			if(stk.empty()) {
				cy.clear();
				break;
			}
			ll y=stk.back(); stk.pop_back();
			cy.eb(y);
			if(y==P[x]) break;
		}
	}
}
map<ll,ll> *mp[MAXN];
void dfs(int x) {
	mp[x] = new map<ll,ll>;
	for(auto i:v[x]) {
		dfs(i);
		if(mp[x]->size() < mp[i]->size()) mp[x] = mp[i];
	}
	for(auto i:v[x]) if(mp[x] != mp[i]) {
		for(auto j:*mp[i]) (*mp[x])[j.f] += j.s;
	}
	(*mp[x])[mx] += C[x];
	(*mp[x])[A[x]] -= C[x];
	(*mp[x])[A[x]-1] += C[x];
	auto it = mp[x]->find(A[x]);
	while(it->s < 0) {
		auto tmp = next(it);
		assert(tmp != mp[x]->end());
		tmp->s += it->s;
		it->s = 0;
		it = tmp;
	}
}
int main() {
	FAST
	cin>>n;
	FOR(i,1,n) cin>>P[i]>>A[i]>>C[i];
	mx = *max_element(A+1, A+n+1) + 1;
	FOR(i,1,n) A[i] = mx - A[i];
	FOR(i,1,n) if(P[i]^i) in[P[i]]=1;
	FOR(i,1,n) if(!in[i]) {
		stk.clear(), cy.clear();
		cycle(i);
		if(cy.empty()) continue;
		sort(all(cy), [](int x,int y){return A[x]>A[y];});
		FOR(i,0,siz(cy)-2) {
			P[cy[i]] = cy[i+1];
		}
		P[cy.back()]=cy.back();
	}
	FOR(i,1,n) if(P[i] ^ i) v[P[i]].eb(i);
	FOR(i,1,n) if(P[i] == i) {
		dfs(i);
		ans += (*mp[i])[mx];
	}
	cout<<ans<<'\n';
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 3 ms 4928 KB Output is correct
3 Correct 3 ms 4940 KB Output is correct
4 Correct 4 ms 5024 KB Output is correct
5 Correct 12 ms 8204 KB Output is correct
6 Correct 10 ms 6964 KB Output is correct
7 Correct 8 ms 6568 KB Output is correct
8 Correct 13 ms 8296 KB Output is correct
9 Correct 10 ms 7088 KB Output is correct
10 Correct 8 ms 6476 KB Output is correct
11 Correct 8 ms 6092 KB Output is correct
12 Correct 14 ms 7056 KB Output is correct
13 Correct 6 ms 6476 KB Output is correct
14 Correct 12 ms 7116 KB Output is correct
15 Correct 8 ms 6092 KB Output is correct
16 Correct 15 ms 9516 KB Output is correct
17 Correct 10 ms 7596 KB Output is correct
18 Correct 10 ms 6092 KB Output is correct
19 Correct 10 ms 7084 KB Output is correct
20 Correct 7 ms 6444 KB Output is correct
21 Correct 7 ms 6476 KB Output is correct
22 Correct 9 ms 7204 KB Output is correct
23 Correct 7 ms 6604 KB Output is correct
24 Correct 9 ms 7076 KB Output is correct
25 Correct 9 ms 6476 KB Output is correct
26 Correct 9 ms 7116 KB Output is correct
27 Correct 21 ms 7056 KB Output is correct
28 Correct 32 ms 7068 KB Output is correct
29 Correct 28 ms 7012 KB Output is correct
30 Correct 9 ms 6988 KB Output is correct
31 Correct 11 ms 6988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 3 ms 4928 KB Output is correct
3 Correct 3 ms 4940 KB Output is correct
4 Correct 4 ms 5024 KB Output is correct
5 Correct 12 ms 8204 KB Output is correct
6 Correct 10 ms 6964 KB Output is correct
7 Correct 8 ms 6568 KB Output is correct
8 Correct 13 ms 8296 KB Output is correct
9 Correct 10 ms 7088 KB Output is correct
10 Correct 8 ms 6476 KB Output is correct
11 Correct 8 ms 6092 KB Output is correct
12 Correct 14 ms 7056 KB Output is correct
13 Correct 6 ms 6476 KB Output is correct
14 Correct 12 ms 7116 KB Output is correct
15 Correct 8 ms 6092 KB Output is correct
16 Correct 15 ms 9516 KB Output is correct
17 Correct 10 ms 7596 KB Output is correct
18 Correct 10 ms 6092 KB Output is correct
19 Correct 10 ms 7084 KB Output is correct
20 Correct 7 ms 6444 KB Output is correct
21 Correct 7 ms 6476 KB Output is correct
22 Correct 9 ms 7204 KB Output is correct
23 Correct 7 ms 6604 KB Output is correct
24 Correct 9 ms 7076 KB Output is correct
25 Correct 9 ms 6476 KB Output is correct
26 Correct 9 ms 7116 KB Output is correct
27 Correct 21 ms 7056 KB Output is correct
28 Correct 32 ms 7068 KB Output is correct
29 Correct 28 ms 7012 KB Output is correct
30 Correct 9 ms 6988 KB Output is correct
31 Correct 11 ms 6988 KB Output is correct
32 Correct 12 ms 8268 KB Output is correct
33 Correct 583 ms 173864 KB Output is correct
34 Correct 371 ms 107948 KB Output is correct
35 Correct 545 ms 166100 KB Output is correct
36 Correct 369 ms 108100 KB Output is correct
37 Correct 219 ms 61280 KB Output is correct
38 Correct 202 ms 50628 KB Output is correct
39 Execution timed out 2076 ms 79484 KB Time limit exceeded
40 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 3 ms 4928 KB Output is correct
3 Correct 3 ms 4940 KB Output is correct
4 Correct 4 ms 5024 KB Output is correct
5 Correct 12 ms 8204 KB Output is correct
6 Correct 10 ms 6964 KB Output is correct
7 Correct 8 ms 6568 KB Output is correct
8 Correct 13 ms 8296 KB Output is correct
9 Correct 10 ms 7088 KB Output is correct
10 Correct 8 ms 6476 KB Output is correct
11 Correct 8 ms 6092 KB Output is correct
12 Correct 14 ms 7056 KB Output is correct
13 Correct 6 ms 6476 KB Output is correct
14 Correct 12 ms 7116 KB Output is correct
15 Correct 8 ms 6092 KB Output is correct
16 Correct 15 ms 9516 KB Output is correct
17 Correct 10 ms 7596 KB Output is correct
18 Correct 10 ms 6092 KB Output is correct
19 Correct 10 ms 7084 KB Output is correct
20 Correct 7 ms 6444 KB Output is correct
21 Correct 7 ms 6476 KB Output is correct
22 Correct 9 ms 7204 KB Output is correct
23 Correct 7 ms 6604 KB Output is correct
24 Correct 9 ms 7076 KB Output is correct
25 Correct 9 ms 6476 KB Output is correct
26 Correct 9 ms 7116 KB Output is correct
27 Correct 21 ms 7056 KB Output is correct
28 Correct 32 ms 7068 KB Output is correct
29 Correct 28 ms 7012 KB Output is correct
30 Correct 9 ms 6988 KB Output is correct
31 Correct 11 ms 6988 KB Output is correct
32 Correct 12 ms 8268 KB Output is correct
33 Correct 583 ms 173864 KB Output is correct
34 Correct 371 ms 107948 KB Output is correct
35 Correct 545 ms 166100 KB Output is correct
36 Correct 369 ms 108100 KB Output is correct
37 Correct 219 ms 61280 KB Output is correct
38 Correct 202 ms 50628 KB Output is correct
39 Execution timed out 2076 ms 79484 KB Time limit exceeded
40 Halted 0 ms 0 KB -