Submission #974168

#TimeUsernameProblemLanguageResultExecution timeMemory
974168tamir1Closing Time (IOI23_closing)C++17
29 / 100
1070 ms39420 KiB
#include "closing.h"
#include <bits/stdc++.h>
#include <vector>
#define ll long long
#define ff first
#define ss second
using namespace std;
vector<pair<int,ll> > v[200001];
ll dis[2][200001];
pair<ll,int> dist[200001];
bitset<3001> vis;
void dfs(int x,int p,ll d,bool k){
	dis[k][x]=min(dis[k][x],d);
	for(pair<int,int> i:v[x]){
		if(i.ff!=p)
		dfs(i.ff,x,d+i.ss,k);
	}
}
int max_score(int N, int X, int Y, long long K,
              std::vector<int> U, std::vector<int> V, std::vector<int> W)
{
	for(int i=0;i<N;i++){
		v[i].clear();
		dis[0][i]=2*K+1;
		dis[1][i]=2*K+1;
	}
	for(int i=0;i<N-1;i++){
		v[U[i]].push_back({V[i],W[i]});
		v[V[i]].push_back({U[i],W[i]});
	}
	dfs(X,-1,0,0);
	dfs(Y,-1,0,1);
	for(int i=0;i<N;i++){
		dist[i]={min(dis[0][i],dis[1][i]),i};
	}
	sort(dist,dist+N);
	ll k=0;
	int ans=0;
	for(int i=0;i<N;i++){
		if(k+dist[i].ff<=K){
			k+=dist[i].ff;
			ans++;
		}
		else break;
	}
	if(dis[0][Y]>2*K) return ans;
    for(int i=0;i<N;i++){
    	for(int j=i;j<N;j++){
    		ll sum=0;
    		int tmp=0;
    		vis.reset();
    		for(int l=i;l<=j;l++){
    			sum+=max(dis[0][l],dis[1][l]);
    			vis[l]=1;
    			tmp+=2;
			}
			if(i>X)
			for(int l=X;l<i;l++){
				sum+=dis[0][l];
				tmp++;
				vis[l]=1;
			}
			if(j<Y)
			for(int l=j+1;l<=Y;l++){
				sum+=dis[1][l];
				tmp++;
				vis[l]=1;
			}
			if(sum>K) continue;
			for(int l=0;l<N;l++){
				if(vis[dist[l].ss]) continue;
				if(sum+dist[l].ff<=K){
					sum+=dist[l].ff;
					tmp++;
				}
				else break;
			}
			ans=max(ans,tmp);
		}
	}
	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...