比赛 |
4043级NOIP2022欢乐赛8th |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
Dance Mooves |
最终得分 |
100 |
用户昵称 |
op_组撒头屯 |
运行时间 |
0.815 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-11-21 20:06:37 |
显示代码纯文本
- #include <bits/stdc++.h>
- using namespace std;
- const int N=100000+5;
- int n,k,r=0;
- int a[N],b[N],id[N],cnt=0;
- bool vis[N],has[N];
- int ans[N]={0};
- vector<int>v[N];
- void dfs(int pt){
- id[pt]=cnt;vis[pt]=1;
- for (int i=0;i<v[pt].size();i++){
- int x=v[pt][i];
- if (!has[x]){
- has[x]=1;ans[cnt]++;
- }
- if (!vis[b[pt]])dfs(b[pt]);
- }
- return ;
- }
- int main(){
- freopen ("dance.in","r",stdin);
- freopen ("dance.out","w",stdout);
- scanf("%d%d",&n,&k);
- for (int i=1;i<=n;i++){
- b[i]=a[i]=i;
- v[b[i]].push_back(i);
- }
- for (int i=1;i<=k;i++){
- int x,y;scanf("%d%d",&x,&y);
- v[b[x]].push_back(y);
- v[b[y]].push_back(x);
- swap(b[x],b[y]);
- }
- for (int i=1;i<=n;i++){
- if (!vis[i]){
- memset(has,0,sizeof(has));
- cnt++;
- dfs(i);
- }
- }
- for (int i=1;i<=n;i++)printf("%d\n",ans[id[i]]);
- return 0;
- }
-