比赛 4043级NOIP2022欢乐赛8th 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 Dance Mooves 最终得分 100
用户昵称 nick 运行时间 4.087 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-11-21 21:02:25
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,k,a[100005],fa[100005];
vector <int> v[100005];
set <int> ans[100005];
int find(int x)
{
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
int main()
{
	freopen("dance.in","r",stdin);
	freopen("dance.out","w",stdout); 
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		fa[i]=i;
		a[i]=i;
	}
	for(int i=1;i<=k;i++)
	{
		int x,y;
		cin>>x>>y;
		swap(a[x],a[y]);
		v[a[x]].push_back(y);
		v[a[y]].push_back(x);
	}
	for(int i=1;i<=n;i++) v[a[i]].push_back(i);
	for(int i=1;i<=n;i++) fa[find(i)]=find(a[i]);
	for(int i=1;i<=n;i++)
		for(int j=0;j<v[a[i]].size();j++)
			ans[find(a[i])].insert(v[a[i]][j]);
	for(int i=1;i<=n;i++) cout<<ans[find(i)].size()<<endl;
	return 0;
}