| 比赛 | 
    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;
}