比赛 |
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;
}