Submission #993980

#TimeUsernameProblemLanguageResultExecution timeMemory
993980aaaaaarrozClosing Time (IOI23_closing)C++17
8 / 100
300 ms60496 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

vector<vector<pair<ll,ll>>>graph;
vector<bool> vis;
void dfs(vector<ll> &dist, int x, ll d){
    vis[x] = true;
    dist[x] = d;
    for (auto [y, w] : graph[x]){
        if (!vis[y]){
            dfs(dist, y, d + w);
        }
    }
}
int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W){
	graph.assign(N,vector<pair<ll,ll>>());
	for(int i=0;i<(N-1);i++){
		graph[U[i]].push_back({V[i],W[i]});
		graph[V[i]].push_back({U[i],W[i]});
	}
	//Calculo de distancia.
	vis.assign(N,false);
	vector<ll>distX(N);
	dfs(distX,X,0);
	vis.assign(N,false);
	vector<ll>distY(N);
	dfs(distY,Y,0);
	vector<ll>closing(N,0);
	set<tuple<ll,ll,ll>>prioridad;
	for(int i=0;i<N;i++){
		prioridad.insert({distX[i],i,0});
	}
	for(int i=0;i<N;i++){
		prioridad.insert({distY[i],i,1});
	}
	int ans=0;
	vector<bool>v(N,false);
	while(!prioridad.empty()){
		auto[peso,nodo,from]=*prioridad.begin();
		prioridad.erase(prioridad.begin());
		if(K>=peso){
			K-=peso;
			closing[nodo]+=peso;
			if(from==0&&!v[nodo]){
				prioridad.erase({distY[nodo],nodo,1});
				prioridad.insert({distY[nodo]-peso,nodo,1});
			}
			else if(from==1&&!v[nodo]){
				prioridad.erase({distX[nodo],nodo,0});
				prioridad.insert({distX[nodo]-peso,nodo,0});
			}
			v[nodo]=true;
			ans++;
		}
	}
	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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...