比赛 2024暑期C班集训4 评测结果 AAAAATTTTT
题目名称 飘雪圣域 最终得分 50
用户昵称 dream 运行时间 5.048 s
代码语言 C++ 内存使用 6.15 MiB
提交时间 2024-07-04 09:18:48
显示代码纯文本
#include<iostream>
using namespace std;
const int N=200005;
int ed[N][2],f[N],mk[N];
int n,q;
int find(int x){
    if(f[x]==x){
        return x;
    }
    return f[x]=find(f[x]);
}
int func(int l,int r){
    for(int i=1;i<=n;i++){
        f[i]=i;
        mk[i]=0;
    }
    for(int i=1;i<n;i++){
        if(ed[i][0]>=l&&ed[i][0]<=r&&ed[i][1]>=l&&ed[i][1]<=r){
            int x=ed[i][0];
            int y=ed[i][1];
            int fx=find(x);
            int fy=find(y);
            f[fy]=fx;
        }
    }
    int res=0;
    for(int i=1;i<=n;i++){
        find(i);
       
        if(!mk[f[i]]&&f[i]>=l&&f[i]<=r){
            res++;
            mk[f[i]]=1;
        }
    }
    return res;
}
int main(){
    freopen("icekingdom.in","r",stdin);
    freopen("icekingdom.out","w",stdout);
    cin>>n>>q;
    for(int i=1;i<n;i++){
        cin>>ed[i][0]>>ed[i][1];
    }
    for(int i=1;i<=q;i++){
        int x,y;
        cin>>x>>y;
        cout<<func(x,y)<<"\n";
    }
    return 0;
}