求调(哭死了)WA0
查看原帖
求调(哭死了)WA0
718184
cqbzhr楼主2024/5/2 22:14
#include <bits/stdc++.h>
using namespace std;
int n,m,k,x,y,fa[400005],a[400005],vis[400005],tot,op,s[400005];
struct node{
	int x,y,h,pr;
}fa2[400005];
int find(int x){
	return x==fa[x]?x:(fa[x]=find(fa[x]));
}
void unite(int x,int y){
	int u=find(x),v=find(y);
	if(u!=v)fa[u]=v;
}
int add(int x,int y){
	op++;
	fa2[op].x=x;
	fa2[op].y=y;
	fa2[op].pr=fa2[x].h;
	fa2[x].h=op;
}
int main(){
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
    cin>>n>>m;
    for(int i=0;i<n;i++){
		fa[i]=i;
		fa2[i].h=-1;
	}
    for(int i=1;i<=m;i++){
    	cin>>x>>y;
    	add(x,y);
    	add(y,x);
	}
	cin>>k;
	for(int i=1;i<=k;i++){
		cin>>a[i];
		vis[a[i]]=1;
	}
	for(int i=1;i<=op;i++){
		if(!vis[fa2[i].x]&&!vis[fa2[i].y])unite(fa2[i].x,fa2[i].y);
	}
	for(int i=0;i<n;i++){
		if(!vis[i]&&fa[i]==i)tot++;
	}
	s[k+1]=tot;
	for(int i=k;i>=1;i--){
		int nx=a[i];
		tot++;
		vis[nx]=0;
		for(int j=fa2[nx].h;j!=-1;j=fa2[j].pr){
			int ny=fa2[j].y;
			if(!vis[ny]&&fa[find(nx)]!=fa[find(ny)]){
				unite(nx,ny);
				tot--;
			}
		}
		s[i]=tot;
	}
	for(int i=1;i<=k+1;i++){
		cout<<s[i]<<"\n";
	}
	return 0;
}
2024/5/2 22:14
加载中...