Submission #439689

#TimeUsernameProblemLanguageResultExecution timeMemory
439689CSQ31Road Closures (APIO21_roads)C++17
36 / 100
497 ms27752 KiB
#include "roads.h" #include<bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define sz(a) (int)(a.size()) #define all(a) a.begin(),a.end() #define lb lower_bound #define ub upper_bound #define owo ios_base::sync_with_stdio(0);cin.tie(0); #define INF (ll)(1e18) #define debug(...) fprintf(stderr, __VA_ARGS__),fflush(stderr) #define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false);\ debug("%s time : %.4fs\n", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC)) typedef long long int ll; typedef long double ld; typedef pair<ll,ll> PII; typedef pair<int,int> pii; typedef vector<vector<int>> vii; typedef vector<vector<ll>> VII; ll gcd(ll a,ll b){if(!b)return a;else return gcd(b,a%b);} vector<vector<PII>> adj(200005); ll dp[2][2001]; void dfs(int v,int u,int k,ll w){ int need = sz(adj[v])-k; need = max(need,0); vector<PII>choose; vector<ll>rest; for(PII z:adj[v]){ int x = z.fi; ll w = z.se; if(x != u){ dfs(x,v,k,w); if(dp[0][x] == INF){ dp[0][v]+=dp[1][x]; dp[1][v]+=dp[1][x]; need--; } else choose.pb({dp[1][x]-min(dp[1][x],dp[0][x]),x}); } } sort(all(choose)); if(need <= sz(choose)){ for(int i=0;i<need;i++)dp[0][v]+=dp[1][choose[i].se]; for(int i=need;i<sz(choose);i++)dp[0][v]+=min(dp[0][choose[i].se],dp[1][choose[i].se]); } else dp[0][v] = INF; if(u != -1){ dp[1][v] += w; need = max(0,need-1); rest.clear(); for(int i=0;i<need;i++)dp[1][v]+=dp[1][choose[i].se]; for(int i=need;i<sz(choose);i++)dp[1][v]+=min(dp[0][choose[i].se],dp[1][choose[i].se]); } } vector<ll>ans; vector<ll> minimum_closure_costs(int n, vector<int> u,vector<int>v,vector<int>w){ bool sub1 =1; bool sub2 = 1; bool sub4 = 1; ans.resize(n); for(int i=0;i<n-1;i++){ ans[0]+=w[i]; if(u[i] != i || v[i] != i+1)sub2 = 0; if(u[i])sub1 = 0; adj[u[i]].pb({v[i],w[i]}); adj[v[i]].pb({u[i],w[i]}); } if(sub1){ sort(all(w)); ll sum = 0; for(int i=0;i<n-1;i++){ sum+=w[i]; ans[n-i-2] = sum; } return ans; } if(sub2){ VII d(2,vector<ll>(n,INF)); d[0][0] = 0; d[1][0] = w[0]; for(int i=1;i<n-1;i++){ d[0][i] = d[1][i-1]; d[1][i] = min(d[0][i-1],d[1][i-1])+w[i]; } ans[1] = min(d[0][n-2],d[1][n-2]); return ans; } for(int i=0;i<n;i++){ for(int i=0;i<n;i++)dp[0][i] = dp[1][i] = 0; dfs(0,-1,i,0); //if(i==1)for(int j=0;j<n;j++)cout<<dp[0][j]<<" "<<dp[1][j]<<'\n'; ans[i] = dp[0][0]; } return ans; }

Compilation message (stderr)

roads.cpp: In function 'std::vector<long long int> minimum_closure_costs(int, std::vector<int>, std::vector<int>, std::vector<int>)':
roads.cpp:62:7: warning: unused variable 'sub4' [-Wunused-variable]
   62 |  bool sub4 = 1;
      |       ^~~~
#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...