前言

tag:tag :tag:*1300 交换 思维 经典好题
传送门 :

题意 :
多组数据,每个人手上都有一本书,对于每个a[i]a[i]a[i]表示将该书传给a[i]a[i]a[i]个人。输出每个人需要多少次才可以拿到自己的书

思路 :
首先这种交换问题有很多变式,同时也非常经典,因为最终都是回到本身

因此不难发现 , 如果把交换过程进行连线, 那么能交换的 必然成一个

然而环中每个数再次轮到本身就是环的大小

因为每个环都只是遍历一次,环中的节点也只遍历一次,所以时间复杂度O(T∗n)O(T*n)O(T∗n)

这里给出两种写法

code :

int n;
int nx[N];
int st[N];
int ans[N];void solve(){cin>>n;for(int i = 0 ;i < n ;i ++ )st[i] = 0, ans[i] = 0 ;for(int i = 0 ;i<n; i ++){cin>>nx[i];nx[i] --;}for(auto x :  nx){vector<int> v;while(!st[x]){v.pb(x);st[x] = 1;x =  nx[x];}for(auto y : v){ans[y] = v.size();}}for(int i = 0 ;i<n;i ++ )cout<<ans[i]<<" ";cout<<endl;}int main(){int t;cin>>t;while(t--)solve();return 0 ;
}
int n;
int a[N];
int st[N];
int sz[N];
int b[N];
vector<int> v[N];void solve(){cin>>n;for(int i = 0 ; i<= n; i ++ ){st[i] = 0 , sz[i] = 0 ;v[i].clear();}int cnt  =0  ;for(int i = 1; i <= n ;i ++ ) cin>>a[i];for(int i = 1; i <= n ;i ++ ){if(st[i]) continue;for(int j = i;;j=a[j]){if(st[j]){cnt++;break;}v[cnt].pb(j);sz[cnt]++;st[j] =  1;}}for(int i = 0;i<cnt;i ++ ){for(auto x : v[i]){b[x] = sz[i];}} for(int i = 1; i <= n ;i ++ ) cout<<b[i]<<" ";cout<<endl;}int main(){int t;cin>>t;while(t--)solve();return 0 ;
}

[cf] Codeforces Round #595 (Div. 3) B12 Books Exchange相关推荐

  1. [CF]Codeforces Round #529 (Div. 3)

    [CF]Codeforces Round #529 (Div. 3) C. Powers Of Two Description A positive integer xx is called a po ...

  2. Codeforces Round #595 (Div. 3) F. Maximum Weight Subset 树形dp

    传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 明显的树形dpdpdp,所以考虑一下dpdpdp状态. 这个题状态挺神的..可能是因为我太菜了,看了半天才看懂. ...

  3. [CF]Codeforces Round #528 Div.2

    Div.2还是稳定四题啊,E题还是没得办法,就争取四题再快点吧. A(签到) 题意:写下s的第一个字符,在最右边写下s的第二个字符,在最左边写下s的第三个字符,以此类推生成字符串t,给出t,求s 找规 ...

  4. [CF]Codeforces Round #546 (Div. 2)

    solved 3 A(签到) 题意: 签到 #include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i= ...

  5. [cf]Codeforces Round #782 (Div. 2)

    目录 前言 A.Red Versus Blue code B. Bit Flipping code C Line Empire code D.(完全不会,蹲大佬的题解) 前言 传送门 : (那天人们又 ...

  6. [CF复盘] Codeforces Round 874 (Div. 3) 20230520】

    [CF复盘] Codeforces Round 874 (Div. 3 20230520 总结 A. Musical Puzzle 2. 思路分析 3. 代码实现 B. Restore the Wea ...

  7. Codeforces Round #533 (Div. 2)题解

    link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...

  8. Codeforces Round #734 (Div. 3) 题解

    Hello大家好,今天给大家带来的是 Codeforces Round #734 (Div. 3) 的全题目讲解. 本文链接:https://www.lanqiao.cn/questions/2040 ...

  9. Codeforces Round #653 (Div. 3)(A, B, C, D, E1详解)

    Codeforces Round #653 (Div. 3) Required Remainder Thinking(binary search) 既然是找最大值问题,我又懒得去推式子,于是我直接就上 ...

  10. Codeforces Round #697 (Div. 3)A~G解题报告

    Codeforces Round #697 (Div. 3)A~G解题报告 题 A Odd Divisor 题目介绍 解题思路 乍一想本题,感觉有点迷迷糊糊,但是证难则反,直接考虑没有奇数因子的情况, ...

最新文章

  1. 【转载】设置Windows中gvim的默认配色方案和字体
  2. <LINUX内核完全剖析:基于0.12内核> 笔记一
  3. 利用Crawlspider爬取腾讯招聘数据(全站,深度)
  4. 安卓效率微商_微商人脉通app下载-微商人脉通 安卓版v2.5.5-PC6安卓网
  5. python网络爬虫(5)BeautifulSoup的使用示范
  6. Go 如何利用 Linux 内核的负载均衡能力
  7. 广告文案被指侮辱女性 茶颜悦色道歉:立即召回相关产品
  8. 一个漏洞被利用 还有多少漏洞 NSA 没公布?
  9. GD32系列总结 - 前言
  10. 几种常见的7号电池的容量
  11. 西安交大2021考研计算机专业复试分数线,西安交通大学2021年研究生复试分数线是多少...
  12. MATLAB排列组合计算
  13. 用思维导图带你重赏《从百草园到三味书屋》
  14. windows机器硬盘不能超过2T详解及图文破解方法
  15. php mocking,测试模拟器 Mocking
  16. C语言万年历(n排)
  17. AndroidQ(八)Android Q隐私:更改相机和连接
  18. 不填写内容用哪个斜杠代替_手写斜杠日期怎么写
  19. SpringBoot集成Redis
  20. thinksns java_社交系统ThinkSNS+技术概要

热门文章

  1. 复旦和同济计算机学硕,考研择校:复旦、同济、上财哪个更有前途?看网友怎么说!...
  2. 转载:Gabor 特征总结
  3. 你知道wps删除空白页的方法吗?进来看看吧
  4. 关于司法行政管理系统
  5. mma7660(重力感应传感器)
  6. supplicant
  7. [CEOI2017]Mousetrap
  8. 脉冲触发器和边沿触发器的区别
  9. 【Elasticsearch源码】 更新性能分析
  10. 移动硬盘提示格式化的处理