比赛 2024暑期C班集训4 评测结果 AAAAAEEEEE
题目名称 飘雪圣域 最终得分 50
用户昵称 健康铀 运行时间 1.068 s
代码语言 C++ 内存使用 33.07 MiB
提交时间 2024-07-04 11:39:42
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long top=1,n,m,a[200010],ans,pre[200010],nm[2010][2010],p[200010],cnt,nxt[200010],to[200010],fm[200010],head[200010];
long long find(long long x){
    if(pre[x]==x)
    return x;
    return pre[x]=find(pre[x]);
}
void join(long long x,long long y){
    long long fx=find(x),fy=find(y);
    if(fx!=fy)
    pre[fx]=fy;
}
int main(){
    freopen("icekingdom.in","r",stdin);
    freopen("icekingdom.out","w",stdout);
    cin>>n>>m;
    for(long long i=1;i<=n-1;i++){
        int x,y;
        cin>>x>>y;
        nxt[x]++;
        nm[x][nxt[x]]=y;
//        cout<<x<<" "<<nxt[x]<<" "<<nm[x][nxt[x]]<<" "<<y<<endl;
//        nm[y][nxt[y]+1]=x;
//        nxt[y]++;
    }
    while(m--){
        int l,r;
        cin>>l>>r;
        for(int i=1;i<=n;i++){
            p[i]=0;
        }
        for(int i=l;i<=r;i++){
            pre[i]=i;
        }
        for(int i=l;i<=r;i++){
            for(int j=1;j<=nxt[i];j++){
                if(l<=nm[i][j]&&r>=nm[i][j])
                join(i,nm[i][j]);
            }
        }
        for(int i=l;i<=r;i++){
            int y=find(i);
        }
        for(int i=l;i<=r;i++){
            p[find(i)]=1;
        }
        int sum=0;
        for(int i=l;i<=r;i++){
            if(p[i]==1)
            sum++;
        }
        cout<<sum<<endl;
    }
    return 0;
}