WA on #10 求调
查看原帖
WA on #10 求调
1050788
DYH_bubble楼主2024/11/29 22:38
#include<bits/stdc++.h>
using namespace std;
const int MAXN=400001;
int n,m,k,f[MAXN],q[MAXN],lv[MAXN],I,J,j=1,cnt,ans[MAXN];
struct con{
	int a,b;
	bool operator < (con _) const {
		return max(lv[a],lv[b])<max(lv[_.a],lv[_.b]);
	}
} adj[MAXN];
int F(int i){
	if(f[i]==i) return i;
	else return f[i]=F(f[i]);
}
void merge(int i,int j){
 	I=F(i);
  	J=F(j);
  	if(I==J) return;
  	f[J]=I;
  	cnt++;
}
void pre(){
  	for(int i=1;i<=n;i++) f[i]=i;
}
int main(){
	cin>>n>>m;
	pre();
	for(int i=1;i<=m;i++){
		cin>>adj[i].a>>adj[i].b;
		adj[i].a++;adj[i].b++;
	}
	cin>>k;
	for(int i=1;i<=k;i++){
		cin>>q[i];
		q[i]++;
		lv[q[i]]=k-i+1;
	}
	sort(adj+1,adj+m+1);
	for(int i=k;i>=1;i--){
		for(;j<=m,max(lv[adj[j].a],lv[adj[j].b])<lv[q[i]];j++){
			merge(adj[j].a,adj[j].b);
		}
		ans[i]=n-cnt;
	}
	for(;j<=m;j++){
		merge(adj[j].a,adj[j].b);
	}
	ans[0]=n-cnt;
	for(int i=0;i<=k;i++) cout<<ans[i]-i<<'\n';
	return 0;
}
2024/11/29 22:38
加载中...