比赛 果蝇王邀请赛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;
}