求助大佬,60分调了1h了,1,8,9,10RE
查看原帖
求助大佬,60分调了1h了,1,8,9,10RE
303498
百年流光楼主2021/2/27 16:10
#include<bits/stdc++.h>
using namespace std;
const int N=800001;
struct v
{
	vector<int> to;
}a[N];
int b[N][2],c[N],s[N],flag[N],fa[N],x,y,num,sl=0;
int find(int x1)
{
	if (fa[x1]==x1) return x1;
	else return fa[x1]=find(fa[x1]);
}
void merge()
{
	if (find(x)!=find(y))
	{
		num--;
		fa[find(y)]=x;
	}
}
int main()
{
	int n,m,k,i,j;
	cin>>n>>m;
	for (i=0;i<=n;++i)
	{
		fa[i]=i;
		flag[i]=0;
	}
	for (i=1;i<=m;++i)
	{
		cin>>x>>y;
		b[i][1]=x;
		b[i][2]=y;
	}
	cin>>k;
	num=n-k;
	for (i=1;i<=k;++i)
	{
		cin>>x;
		c[i]=x;
		flag[x]=1;
	}
	for (i=1;i<=m;++i)
	{
		x=b[i][1],y=b[i][2];
		if (flag[x]==0&&flag[y]==0)
		  merge();
		else
		{
			a[x].to.push_back(y);
			a[y].to.push_back(x);
		}
	}
	for (i=k;i>=1;--i)
	{
	    int u=c[i];
		sl++;
		s[sl]=num;
		flag[u]=0;
		num++;
		for (j=0;j<=a[u].to.size()-1;++j)
		{
			x=u;
			y=a[u].to[j];
			if (flag[y]==0)
			  merge();
		}
	}
	sl++;
	s[sl]=num;
	for (i=sl;i>=1;--i)
	  cout<<s[i]<<endl;
	return 0;
}
2021/2/27 16:10
加载中...