제출 #1195034

#제출 시각아이디문제언어결과실행 시간메모리
1195034dzuizzRoad Closures (APIO21_roads)C++20
7 / 100
32 ms10824 KiB
#include "roads.h" #include <bits/stdc++.h> using namespace std; constexpr int N=1e5+5; int n; vector<pair<int,int>> g[N]; pair<int,int> pa[N]; int s[N],_s; void dfs(int i){ for(auto&[w,x]:g[i]) if(x!=pa[i].second){ pa[x]={w,i}; dfs(x); } s[_s++]=i; } std::vector<long long> minimum_closure_costs(int _n,vector<int> U,vector<int> V,vector<int> W){ n=_n; for(int i=0;i<n-1;++i){ g[U[i]].emplace_back(W[i],V[i]); g[V[i]].emplace_back(W[i],U[i]); } //pa[0]={0,0}; dfs(0); vector<long long> ret(n,0); { // Subtask 2 - Line graph long long dp[n-1][2]; // 0-notake, 1-take dp[0][0]=W[0]; dp[0][1]=0; for(int i=1;i<n-1;++i){ dp[i][0]=min(dp[i-1][0],dp[i-1][1])+W[i]; dp[i][1]=dp[i-1][0]; } ret[1]=min(dp[n-2][0],dp[n-2][1]); for(int i=0;i<n-1;++i) ret[0]+=W[i]; } /* { // Subtask 1 - Star graph ret[n-1]=0; sort(W.begin(),W.end(),greater<int>()); for(int i=n-2;i>=0;--i){ ret[i]=ret[i+1]+W[i]; } } */ return ret; } vector<long long> brute_force(int n,vector<int>U,vector<int>V,vector<int>W){ vector<long long> ret(n,0); ret[1]=3e18; bool v[n-1]; for(long long msk=0;msk<(1<<(n-1));++msk){ for(int i=0;i<n;++i) v[i]=msk>>i&1; bool f=0; for(int i=1;i<n-1&&!f;++i){ if(v[i]&&v[i-1]) f=1; } if(f) continue; long long res=0; for(int i=0;i<n-1;++i) if(!v[i]){ res+=W[i]; } ret[1]=min(ret[1],res); } for(int i=0;i<n-1;++i) ret[0]+=W[i]; 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...