This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 2e5;
ll v[N],v2[N],cost[N];
vector <ll> e[N];
ll vis[N];
vector <ll> chain;
map <ll,ll> costs[N];
map <ll,ll> res;
map <ll,ll> sv;
void dfs(ll node, ll p){
//cout<<node<<' '<<p<<'\n';
vis[node] = 2;
for(auto i:e[node]){
if(i == p || vis[i] == 2)continue;
dfs(i,node);
if(costs[node].size() < costs[i].size()){
swap(costs[node],costs[i]);
}
for(auto j:costs[i]){
costs[node][j.first]+=j.second;
}
costs[i].clear();
}
if(p != -1){
ll x = cost[node];
while(x > 0){
auto it = costs[node].lower_bound(v2[node]);
if(it == costs[node].begin())break;
it = prev(it);
ll nr = min(x,it->second);
x-=nr;
it->second-=nr;
if(it->second == 0)costs[node].erase(it->first);
}
costs[node][v2[node]]+=cost[node];
}
}
int main(){
ll n;
ll ans2 = 0,sum = 0;
cin>>n;
for(ll i = 0;i < n;i++){
cin>>v[i]>>v2[i]>>cost[i];
sum+=cost[i];
v[i]--;
e[v[i]].push_back(i);
}
for(ll i = 0;i < n;i++){
if(vis[i])continue;
chain.clear();
ll nr = i;
while(vis[nr] == 0){
vis[nr] = 1;
nr = v[nr];
}
while(vis[nr] == 1){
chain.push_back(nr);
vis[nr] = 2;
nr = v[nr];
}
res.clear();
sv.clear();
ll ans = 0;
for(auto j:chain){
dfs(j,-1);
for(auto k:costs[j]){
res[k.first]+=k.second;
}
sv[v2[j]]+=cost[j];
}
if(!res.empty()){
ll sum2 = 0;
for(auto k = prev(res.end());1;k--){
sum2+=k->second;
k->second = sum2;
if(k == res.begin())break;
}
ans = max(ans,sum2);
for(auto k = prev(sv.end());1;k--){
auto it = res.lower_bound(k->first);
if(it == res.end()){
ans = max(ans,k->second);
}else{
ans = max(ans,k->second + it->second);
}
if(k == sv.begin())break;
}
}else{
for(auto k:sv){
ans = max(ans,k.second);
}
}
//cout<<ans<<'\n';
ans2+=ans;
}
cout<<sum - ans2<<'\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |