Submission #1235006

#TimeUsernameProblemLanguageResultExecution timeMemory
1235006lalig777봉쇄 시간 (IOI23_closing)C++20
0 / 100
1068 ms2071360 KiB
#include "closing.h"
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
//#define int long long
using namespace std;
typedef long long ll;

vector<vector<pair<int, ll> > >adj;
vector<ll>closx;
vector<ll>closy;

void dfs(int round, int u, int p){
	for (auto vec: adj[u]){
		int v=vec.first;
		ll w=vec.second;
		if (v==p) continue;
		if (round==1) closx[v]=closx[u]+w;
		else closy[v]=closy[u]+w;
		dfs(round, v, u);
	}return;
}

int max_score(int N, int X, int Y, ll K, vector<int>U, vector<int>V, vector<int>W){
	adj.resize(N);
	closx.assign(N, 0);
	closy.assign(N, 0);

	for (int i=0; i<N-1; i++){
		adj[U[i]].push_back(make_pair(V[i], W[i]));
		adj[V[i]].push_back(make_pair(U[i], W[i]));
	}
	dfs(1, X, X);
	dfs(2, Y, Y);
	vector<ll>all(2*N);
	for (int i=0; i<N; i++) all[i]=closx[i];
	for (int i=0; i<N; i++) all[N+i]=closy[i];
	sort(all.begin(), all.end());
	//for (int i=0; i<2*N; i++) cout<<all[i]<<' ';
	//cout<<endl;
	int ans=0;
	for (int i=0; i<2*N; i++){
		if (all[i]<=K){
			ans++;
			K-=all[i];
		}else break;
	}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...