1 条题解

  • 0
    @ 2026-2-1 18:40:49
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int fa[N];
    int findfa(int x){return fa[x]==x?fa[x]:fa[x]=findfa(fa[x]);}
    set<int>s[N],s2[N];
    int a[N];
    int main()
    {
    	int n,m;cin>>n>>m;
    	for(int i=1;i<=n;i++)s[i].insert(i),a[i]=fa[i]=i;
    	for(int i=1;i<=m;i++)
    	{
    		int x,y;cin>>x>>y;
    		swap(a[x],a[y]);
    		s[a[x]].insert(x);s[a[y]].insert(y);
    	}
    	for(int i=1;i<=n;i++)
    	{
    		int tx=findfa(i),ty=findfa(a[i]);
    		fa[tx]=ty;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		for(int j:s[i])
    			s2[findfa(i)].insert(j);
    	}
    	for(int i=1;i<=n;i++)cout<<s2[fa[i]].size()<<'\n';
    	return 0;
    }
    • 1

    信息

    ID
    7066
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    96
    已通过
    10
    上传者