Submission #824129

#TimeUsernameProblemLanguageResultExecution timeMemory
824129MosesRoad Closures (APIO21_roads)C++14
0 / 100
130 ms14972 KiB
#include "roads.h"
#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
const int N = 1e5+7;
typedef pair<int,int> pii;
vector<int> g[N];
int deg[N];

std::vector<long long> minimum_closure_costs(int N, std::vector<int> U,
                                             std::vector<int> V,
                                             std::vector<int> W) {
	vector<long long> ans(N,0);
	int n = N;
	for(int i = 0 ; i < n-1 ; i++) {
		g[U[i]].push_back(V[i]);
		g[V[i]].push_back(U[i]);
		deg[U[i]]++;
		deg[V[i]]++;
	}
	
	set<pii> st;
	for(int i = 0 ; i < n ; i++) st.insert({-deg[i],i});
	int cnt = 0;
	for(int i = N-1 ; i >= 0 ; i--) {
		while(-(*st.begin()).F > i) {
			auto x = *st.begin();
			st.erase(st.begin());
			cnt++;
			int u = x.S;
			deg[u]--;
			st.insert({-deg[u],u});
			pii mx = {-1,-1};
			for(auto v:g[u]) {
				mx = max(mx,{deg[v],v});
			}
			st.erase({-mx.F,mx.S});
			deg[mx.S]--;
			st.insert({-deg[mx.S],mx.S});
		}
		ans[i] = cnt;
	}
	return ans;
}
#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...