40分求助?
查看原帖
40分求助?
89441
huang_jr楼主2022/3/1 23:03

评测链接

#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll n,m,k,f[400005],s[400005],build[400005],sum[400005],ans[400005];
vector<ll> g[400005];

ll find(ll kk)
{
	if (f[kk]!=kk)
		f[kk]=find(f[kk]);
	return f[kk];
}

int main()
{
	cin>>n>>m;
	for (ll i=0;i<n;i++)
	{
		f[i]=i;
		sum[i]=1;
	}
	for (ll i=0;i<m;i++)
	{
		ll a,b;
		cin>>a>>b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	cin>>k;
	for (ll i=0;i<k;i++)
	{
		cin>>s[i];
		build[s[i]]=1;
	}
	ll cnt=n-k;
	for (ll i=0;i<n;i++)
		if (build[i]==0)
			for (ll j=0;j<g[i].size();j++)
				if (build[g[i][j]]==0&&find(g[i][j])!=find(i))
				{
					f[find(g[i][j])]=find(j);
					cnt--;
				}
	ans[k]=cnt;
	for (ll i=k-1;i>=0;i--)
	{
		build[s[i]]=0;
		cnt++;
		for (ll j=0;j<g[s[i]].size();j++)
			if (build[g[s[i]][j]]==0&&find(g[s[i]][j])!=find(s[i]))
			{
				f[find(g[s[i]][j])]=find(s[i]);
				cnt--;
			}
		ans[i]=cnt;
	}
	for (ll i=0;i<=k;i++)
		cout<<ans[i]<<endl;
	return 0;
}
2022/3/1 23:03
加载中...