Submission #563038

#TimeUsernameProblemLanguageResultExecution timeMemory
563038DevigoRoad Closures (APIO21_roads)C++14
0 / 100
2081 ms7544 KiB
#include <bits/stdc++.h> using namespace std; const int siz = 1e5+1; bool done = 0; long long cost = 0; vector<bool> rem(siz,0); struct edge { long long w, x, y; }; bool cmp (edge a, edge b) { return a.w < b.w; } void get(int k, vector<int> &degree, vector<edge> &el, int n, int m) { for(int i=0; i<m; i++) { if(rem[i]) continue; bool isb = 0; int u = degree[el[i].x]; int v = degree[el[i].y]; if(u > k || v > k) isb = 1; if(isb) { degree[el[i].x]--; degree[el[i].y]--; rem[i] = 1; cost += el[i].w; } int grt = -1; for(int j=0; j<n; j++) { grt = max(grt,degree[j]); } if(grt <= k) { done = 1; return; } } return; } vector<long long> minimum_closure_costs(int n, vector<int> u, vector<int> v, vector<int> w) { vector<int> degree(n,0); vector<edge> el; int m = n-1; for(int i=0; i<m; i++) { degree[u[i]]++; degree[v[i]]++; el.push_back({w[i],u[i],v[i]}); } sort(el.begin(), el.end(), cmp); vector<long long> c(n); for(int i=m; i>=0; i--) { while(!done) { get(i,degree,el,n,m); } c[i] = cost; done = 0; } return c; }
#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...