t
a
g
:
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 nx[i];
nx[i] --;
}
for(auto x : nx){
vector 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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?