Submission #1168186

#TimeUsernameProblemLanguageResultExecution timeMemory
1168186UmairAhmadMirzaTriumphal arch (POI13_luk)C++20
0 / 100
388 ms18568 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
int const N=3e5+5;
int const mod=1e9+7;

vector<int> adj[N];

int dp[N],n,cur;

void dfs(int node,int par){
	dp[node]=adj[node].size();
	if(par>0)
		dp[node]--;
	dp[node]-=cur;
	for(int i:adj[node])
		if(i!=par){
			dfs(i,node);
			dp[node]+=dp[i];
		}
	// dp[node]=max(dp[node],0);
}

bool solve(int k){
	for (int i = 0; i <=n; ++i)
		dp[i]=0;
	cur=k;
	dfs(1,0);
	return (dp[1]<=0);
}

int main(){
	cin>>n;
	for (int i = 1; i < n; ++i)
	{
		int u,v;
		cin>>u>>v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	int low=0,high=n;
	while(high-low>1){
		int mid=(high+low)/2;
		if(solve(mid))
			high=mid;
		else
			low=mid;
	}
	cout<<high<<endl;
	return 0;
}
#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...