Submission #1329235

#TimeUsernameProblemLanguageResultExecution timeMemory
1329235thelegendary08Worst Reporter 4 (JOI21_worst_reporter4)C++17
79 / 100
495 ms84940 KiB
#include<bits/stdc++.h>
#define int long long
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define F first
#define S second
#define vi vector<int>
#define pii pair<int,int>
#define mii map<int,int>
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
#define vout(v) cout<<#v<<": "; for(auto u : v)cout<<u<<' '; cout<<endl
using namespace std;
const int mxn = 2e5 + 5; 
int par[mxn], h[mxn], c[mxn]; vi adj[mxn];
void merge(mii &a, mii b){
	if(a.size() < b.size())swap(a,b); for(auto &[x,y] : b)a[x] += y;
}
mii solve(int node){
	mii ret; ret[0] += c[node]; for(auto u : adj[node])merge(ret,solve(u)); 
	ret[h[node]] -= c[node]; ret[h[node] + 1] += c[node]; int cur = 0; while(1){
		auto it = ret.upper_bound(h[node]); if(it == ret.end())break; if(it->second + cur >= 0)cur += it->second, ret.erase(it->first); else{
			it->second = (it->second + cur); break;	
		}
	} //dout(node); for(auto [a,b] : ret)dout2(a,b); cout<<'\n'; 
	return ret; 
	/*
	f0r(x,mxn){
		int sum = 0; for(auto u : adj[node])sum += dp[u][x]; dp[node][x] = sum + c[node]; if(x == h[node])dp[node][x] = sum; 
	} FOR(i,1,mxn)dp[node][i] = min(dp[node][i], dp[node][i-1]); 
	*/
}
signed main(){
	int n; cin>>n; f0r(i,n)cin>>par[i]>>h[i]>>c[i], par[i]--; FOR(i,1,n)adj[par[i]].pb(i); set<int>s; f0r(i,n)s.insert(h[i]); 
	map<int,int> cmp; int ptr = s.size(); for(auto u : s)cmp[u]=ptr, ptr--; f0r(i,n)h[i]=cmp[h[i]];
	// f0r(i,n)f0r(j,mxn)dp[i][j]=4e18; solve(0); int ans = 4e18; f0r(i,mxn)ans = min(ans, dp[0][i]); cout<<ans<<'\n'; 
	mii ret = solve(0); int cur = 0, ans = 4e18; for(auto [a,b] : ret)cur += b, ans = min(ans,cur); cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...