[cf] Codeforces Round #595 (Div. 3) B12 Books Exchange
前言
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相关推荐
- [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 ...
- Codeforces Round #595 (Div. 3) F. Maximum Weight Subset 树形dp
传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 明显的树形dpdpdp,所以考虑一下dpdpdp状态. 这个题状态挺神的..可能是因为我太菜了,看了半天才看懂. ...
- [CF]Codeforces Round #528 Div.2
Div.2还是稳定四题啊,E题还是没得办法,就争取四题再快点吧. A(签到) 题意:写下s的第一个字符,在最右边写下s的第二个字符,在最左边写下s的第三个字符,以此类推生成字符串t,给出t,求s 找规 ...
- [CF]Codeforces Round #546 (Div. 2)
solved 3 A(签到) 题意: 签到 #include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i= ...
- [cf]Codeforces Round #782 (Div. 2)
目录 前言 A.Red Versus Blue code B. Bit Flipping code C Line Empire code D.(完全不会,蹲大佬的题解) 前言 传送门 : (那天人们又 ...
- [CF复盘] Codeforces Round 874 (Div. 3) 20230520】
[CF复盘] Codeforces Round 874 (Div. 3 20230520 总结 A. Musical Puzzle 2. 思路分析 3. 代码实现 B. Restore the Wea ...
- Codeforces Round #533 (Div. 2)题解
link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...
- Codeforces Round #734 (Div. 3) 题解
Hello大家好,今天给大家带来的是 Codeforces Round #734 (Div. 3) 的全题目讲解. 本文链接:https://www.lanqiao.cn/questions/2040 ...
- Codeforces Round #653 (Div. 3)(A, B, C, D, E1详解)
Codeforces Round #653 (Div. 3) Required Remainder Thinking(binary search) 既然是找最大值问题,我又懒得去推式子,于是我直接就上 ...
- Codeforces Round #697 (Div. 3)A~G解题报告
Codeforces Round #697 (Div. 3)A~G解题报告 题 A Odd Divisor 题目介绍 解题思路 乍一想本题,感觉有点迷迷糊糊,但是证难则反,直接考虑没有奇数因子的情况, ...
最新文章
- 【转载】设置Windows中gvim的默认配色方案和字体
- <LINUX内核完全剖析:基于0.12内核> 笔记一
- 利用Crawlspider爬取腾讯招聘数据(全站,深度)
- 安卓效率微商_微商人脉通app下载-微商人脉通 安卓版v2.5.5-PC6安卓网
- python网络爬虫(5)BeautifulSoup的使用示范
- Go 如何利用 Linux 内核的负载均衡能力
- 广告文案被指侮辱女性 茶颜悦色道歉:立即召回相关产品
- 一个漏洞被利用 还有多少漏洞 NSA 没公布?
- GD32系列总结 - 前言
- 几种常见的7号电池的容量
- 西安交大2021考研计算机专业复试分数线,西安交通大学2021年研究生复试分数线是多少...
- MATLAB排列组合计算
- 用思维导图带你重赏《从百草园到三味书屋》
- windows机器硬盘不能超过2T详解及图文破解方法
- php mocking,测试模拟器 Mocking
- C语言万年历(n排)
- AndroidQ(八)Android Q隐私:更改相机和连接
- 不填写内容用哪个斜杠代替_手写斜杠日期怎么写
- SpringBoot集成Redis
- thinksns java_社交系统ThinkSNS+技术概要