Submission #1336143

#TimeUsernameProblemLanguageResultExecution timeMemory
1336143DanielPr8도로 폐쇄 (APIO21_roads)C++20
0 / 100
2095 ms37388 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvl = vector<vll>;
using pll = pair<ll,ll>;
using vpl = vector<pll>;
using vvp = vector<vpl>;
using vi = vector<int>;
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(),v.end()
vll w,deg, dp, dp1, al, dw;
vvp g;
vvl del, del1;

void dfs(ll cur, ll pr, ll k){
    priority_queue<pll,vpl,greater<pll>> pq;
    for(auto [i,e]: g[cur]){
        if(i!=pr){
            dw[e]=i;
            dfs(i,cur,k);
            dp1[cur]+=dp[i];
            pq.push({dp1[i]-dp[i]+w[e],e});
        }
    }
    while(!pq.empty() && (pq.top().f<0 || g[cur].size()-del1[cur].size()-del[cur].size()-1>k)){
        auto [v,e] = pq.top();
        pq.pop();
        dp1[cur]+=v;
        del1[cur].pb(e);
    }
    dp[cur]=dp1[cur];
    while(!pq.empty() && (pq.top().f<0 || g[cur].size()-del1[cur].size()-del[cur].size()>k)){
        auto [v,e] = pq.top();
        pq.pop();
        dp[cur]+=v;
        del[cur].pb(e);
    }
}

void fil(ll cur, ll pr, ll ch=0){
    for(ll i:del1[cur]){
        al.pb(i);
        fil(dw[i],cur,1);
        dp[dw[i]=-1];
    }
    if(!ch){
        for(ll i:del[cur]){
            al.pb(i);
            fil(dw[i],cur,1);
            dp[dw[i]=-1];
        }
    }
    for(auto [i,e]: g[cur]){
        if(i!=pr && dp[i]!=-1){
            dp[i]=-1;
            fil(i,cur);
        }
    }
}


std::vector<long long> minimum_closure_costs(int n, vi u, vi v, vi W) {
    g = vvp(n);
    dw=deg = vll(n);
    vll ans(n);

    for(ll i = 0; i < n-1; ++i){
        ans[0]+=W[i];
        w.pb(W[i]);
        g[u[i]].pb({v[i],i});
        g[v[i]].pb({u[i],i});
        deg[u[i]]++;
        deg[v[i]]++;
    }
    vll las(n-1,1);
    for(ll i = 1; i < n; ++i){
        dp=dp1=vll(n);
        del=del1=vvl(n);
        dfs(0,0,i);
        ans[i]=dp[0];
        al.clear();
        fil(0,0);
        for(ll i:al){
            if(las[i]==0){
                cout << "!";
            }
        }
        las=vll(n-1,0);
        for(ll i:al){
            las[i]=1;
        }

    }
    return ans;
}


// int main() {
//   int N;
//   assert(1 == scanf("%d", &N));

//   vi U(N - 1), V(N - 1), W(N - 1);
//   for (int i = 0; i < N - 1; ++i) {
//     assert(3 == scanf("%d %d %d", &U[i], &V[i], &W[i]));
//   }

//   std::vector<long long> closure_costs = minimum_closure_costs(N, U, V, W);
//   for (int i = 0; i < static_cast<int>(closure_costs.size()); ++i) {
//     if (i > 0) {
//       printf(" ");
//     }
//     printf("%lld",closure_costs[i]);
//   }
//   printf("\n");
//   return 0;
// }

Compilation message (stderr)

roads.cpp: In function 'void fil(ll, ll, ll)':
roads.cpp:47:20: warning: ignoring return value of 'constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type) [with _Tp = long long int; _Alloc = std::allocator<long long int>; reference = long long int&; size_type = long unsigned int]', declared with attribute 'nodiscard' [-Wunused-result]
   47 |         dp[dw[i]=-1];
      |                    ^
In file included from /usr/include/c++/13/vector:66,
                 from /usr/include/c++/13/functional:64,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:53,
                 from roads.cpp:1:
/usr/include/c++/13/bits/stl_vector.h:1126:7: note: declared here
 1126 |       operator[](size_type __n) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~
roads.cpp:53:24: warning: ignoring return value of 'constexpr std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](size_type) [with _Tp = long long int; _Alloc = std::allocator<long long int>; reference = long long int&; size_type = long unsigned int]', declared with attribute 'nodiscard' [-Wunused-result]
   53 |             dp[dw[i]=-1];
      |                        ^
/usr/include/c++/13/bits/stl_vector.h:1126:7: note: declared here
 1126 |       operator[](size_type __n) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~
#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...