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