| 比赛 |
果蝇王邀请赛div1 |
评测结果 |
AAAWAWWWWWWWWWWWWWWWWWAW |
| 题目名称 |
蜜雪树 |
最终得分 |
4 |
| 用户昵称 |
默 |
运行时间 |
0.917 s |
| 代码语言 |
C++ |
内存使用 |
12.90 MiB |
| 提交时间 |
2026-08-27 12:58:49 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX (int)(1e18)
const int N=3e5+10;
int n,idx,rt,A,B;
int head[N],nxt[N<<1],ver[N<<1];
inline int read(){
int t=0,f=1;
register char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
return t*f;
}
void add(int u,int v){
nxt[++idx]=head[u];
head[u]=idx;
ver[idx]=v;
}
int cnt;
int a[N];
void dfs(int u,int v){
a[++cnt]=u;
for(int i=head[u];i;i=nxt[i]){
int dao=ver[i];
if(dao==v) continue;
dfs(dao,u);
}
}
int mk[N];
signed main(){
freopen("mixuetree.in","r",stdin);
freopen("mixuetree.out","w",stdout);
int ce=read();
n=read(),rt=read(),A=read(),B=read();
if(A<=B){cout<<1<<"\n";return 0;}
for(int i=1;i<n;i++){
int u=read(),v=read();
add(u,v),add(v,u);
}
dfs(rt,0);
for(int i=1;i<=(n-1)/A;i++){
int l=i*A+1,r=min(i*A+(i-1)*B+1,n);
mk[l-B]++,mk[r]--;
r=min(r+B,n),l=max(n-A+1,l);
if(l<=r) mk[l]++,mk[min(r+B,n)+1]--;
}
int ans=INT_MAX;
for(int i=1;i<=n;i++){
mk[i]+=mk[i-1];
if(mk[i]) ans=min(ans,a[i]);
}
cout<<ans<<"\n";
return 0;
}