제출 #1334336

#제출 시각아이디문제언어결과실행 시간메모리
1334336hoangmc2009도로 폐쇄 (APIO21_roads)C++17
0 / 100
2095 ms14880 KiB
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int maxn=2e5+9;
i64 dp[maxn][2];
vector<pair<int,i64>> adj[maxn];
void DFS(int u,int pu,int k)
{
    i64 sum=0;
    vector<pair<i64,i64>> hmm;
    for(auto& [v,w]:adj[u])
    {
        if(v!=pu)
        {
            DFS(v,u,k);
            hmm.push_back({dp[v][0],dp[v][1]+w});
            sum+=dp[v][1]+w;
        }
    }
    sort(hmm.begin(),hmm.end(),[&](pair<i64,i64> x,pair<i64,i64> y){
        return x.first-x.second<y.first-y.second;
    });
    dp[u][0]=dp[u][1]=sum;
    for(int ch=0,i=0;i<hmm.size();++i)
    {
        if(hmm[i].first<hmm[i].second) sum+=hmm[i].first-hmm[i].second,++ch;
        if(ch<k) dp[u][0]=sum;
        if(ch<=k) dp[u][1]=sum;
    }
}
vector<i64> minimum_closure_costs(int N,vector<int> U,vector<int> V,vector<int> W)
{
    vector<i64> res(N+1,0);
    for(int i=1;i<N;++i)
    {
        res[0]+=W[i-1];
        adj[U[i-1]].push_back({V[i-1],W[i-1]});
        adj[V[i-1]].push_back({U[i-1],W[i-1]});
    }
    for(int k=1;k<=N;++k)
    {
        DFS(0,-1,k);
        res[k]=dp[0][1];
    }
    return res;
}
#ifdef Graven
int n; vector<int> u,v,w;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin>>n; u.resize(n); v.resize(n); w.resize(n);
    for(int i=1;i<n;++i) cin>>u[i-1]>>v[i-1]>>w[i-1];
    vector<i64> res=minimum_closure_costs(n,u,v,w);
    for(int i=0;i<n;++i) cout<<res[i]<<" ";
}
#endif
/*
5
0 1 1
0 2 4
0 3 3
2 4 2
-> 10 5 1 0 0
4
0 1 5
2 0 10
0 3 5
-> 20 10 5 0
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...