加判断中途退出
查看原帖
加判断中途退出
752257
Miangoa楼主2023/7/17 19:16
#include<bits/stdc++.h>

using namespace std;

int n,m,k,sit[200001][2],fat[400001],del[400001],ans[400001];
bool bre[400001];

int find(int p) {
	if(fat[p]==p||bre[fat[p]])
		return p;
	else
		return fat[p]=find(fat[p]);
}

void read() {
	cin>>n>>m;
	for(int i=1; i<=m; i++)
		cin>>sit[i][0]>>sit[i][1];
	cin>>k;
	for(int i=1; i<=k; i++) {
		cout<<i<<' ';
		cin>>del[i];
		bre[del[i]]=true;
	}
}

int main() {
	read();
	for(int i=0; i<n; i++)
		fat[i]=i;
	for(int i=1; i<=m; i++)
		fat[find(sit[i][0])]=find(sit[i][1]);
	for(int i=k; i>=0; i--) {
		cout<<i<<' ';
		bre[del[i]]=false;
		for(int j=0; j<n; j++)
//			if(!bre[j]&&find(j)==j)
				ans[i]++;
	}
	for(int i=0; i<=k; i++)
		cout<<ans[i]<<endl;
}
2023/7/17 19:16
加载中...