WA on #18求调(玄关)
查看原帖
WA on #18求调(玄关)
1030785
wangtingmu楼主2024/8/3 11:14
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+1;
int l[maxn],r[maxn],n,m;
struct node{
	int fa[505];
	int find_(int x){
		if(fa[x]==x) return x;
		else return fa[x]=find_(fa[x]);
	}
	void union_(int a,int b){
		int q=find_(a);
		int p=find_(b);
		if(q>p) swap(q,p);
		if(p!=q) fa[p]=q;
	}
	void init(){
		for(int i=1;i<=n;i++) fa[i]=i;
	}
};
node d1[maxn],d2[maxn];
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>l[i]>>r[i];
	}
	d1[0].init();
	//d1[0].cnt=0;
	for(int i=1;i<=m;i++){
		d1[i]=d1[i-1];
		//d1[i].cnt++;
		d1[i].union_(l[i],r[i]);
	}
	d2[m+1].init();
	//d2[0].cnt=0;
	for(int i=m;i>=1;i--){
		d2[i]=d2[i+1];
		//d1[i].cnt++;
		d2[i].union_(l[i],r[i]);
	}
	int t;
	cin>>t;
	for(int i=1;i<=t;i++){
		int xx,yy;
		cin>>xx>>yy;
		node ll=d1[xx-1],rr=d2[yy+1];
		node ans=ll;
		for(int j=1;j<=n;j++) ans.union_(ans.fa[j],rr.fa[j]);
		int x=0;
		//memset(vis,0,sizeof(vis));
		for(int j=1;j<=n;j++) if(ans.fa[j]==j){
			x++;
		}
		cout<<x<<endl;
	}
	return 0;
}
2024/8/3 11:14
加载中...