제출 #1333776

#제출 시각아이디문제언어결과실행 시간메모리
1333776KALARRY도로 폐쇄 (APIO21_roads)C++20
0 / 100
13 ms2580 KiB
//chockolateman

#include<bits/stdc++.h>

using namespace std;

const long long INF = 1e15;

int K,deg[2005];
long long dp[2005][2005][2];
vector<pair<int,int>> adj[2005];

void dfs(int v,int p,int par_w)
{
    dp[v][0][1] = INF;
    dp[v][0][0] = par_w;
    for(auto e : adj[v])
    {
        int u = e.first;
        int w = e.second;
        if(u != p)
        {
            dfs(u,v,w);
            dp[v][0][0] += dp[u][0][0];
        }
    }

    for(int k = 1 ; k <= K ; k++)
    {
        dp[v][k][0] += par_w;
        vector<int> temp;
        for(auto e : adj[v])
        {
            int u = e.first;
            if(u != p)
            {
                dp[v][k][0] += dp[u][k][0];
                dp[v][k][1] += dp[u][k][0];
                temp.push_back(dp[u][k][0] - dp[u][k][1]);
            }
        }
        sort(temp.begin(),temp.end(),greater<long long>());
        int L = temp.size();
        for(int i = 0 ; i < min(L,k-1) ; i++)
            if(temp[i] > 0)
            {
                dp[v][k][0] -= temp[i];
                dp[v][k][1] -= temp[i];
            }
        if(L >= k && temp[k-1] > 0)
            dp[v][k][0] -= temp[k-1];
    }
}

std::vector<long long> minimum_closure_costs(int N, std::vector<int> U,std::vector<int> V, std::vector<int> W) 
{
    K = N;
    for(int i = 0 ; i < N-1 ; i++)
    {
        U[i]++;
        V[i]++;
        adj[U[i]].push_back({V[i],W[i]});
        adj[V[i]].push_back({U[i],W[i]});
        deg[U[i]]++;
        deg[V[i]]++;
    }
    dfs(1,1,0);
    vector<long long> ret;
    for(int k = 0 ; k <= K ; k++)
        ret.push_back(dp[1][k][0]);
    return ret;
}
#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...