제출 #1328807

#제출 시각아이디문제언어결과실행 시간메모리
1328807thelegendary08Worst Reporter 4 (JOI21_worst_reporter4)C++17
14 / 100
331 ms197472 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 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 = 5005; 
int par[mxn], h[mxn], c[mxn], dp[mxn][mxn]; vi adj[mxn];
void solve(int node){
	for(auto u : adj[node])solve(u); 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'; 
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...