cf 595 补题

Posted w-w-t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cf 595 补题相关的知识,希望对你有一定的参考价值。

1.B2   Books Exchange (hard version)

  题意:有n(1~n)个孩子看书,定义一个数组,记录了每个孩子看完??,把书给的下一个人

     T个样例,输出孩子重新拿到自己的书需要的传递次数

  思路:easy  : i=a[ i ] ;直到 i ==本身,记录次数

        hard :   递归找环 ,运用递归,减少遍历次数,就是说一次递归把环上的所有点的次数全部找到。

技术图片
#include<bits/stdc++.h>
using namespace std;
const int MA=2e5+5;

int a[MA];
int book[MA];
//递归找环 
int solve(int init,int now,int next,int step){
    if(init==next)
        return book[now]=step;
    else return book[now]=solve(init,next,a[next],step+1);
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    
    int n,t;
    cin>>t;
    while(t--){
        memset(book,0,sizeof(book));
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++){
            if(book[i]==0){
                solve(i,i,a[i],1);
            }
        }
        for(int i=1;i<n;i++){
            cout<<book[i]<<" "; 
        }
        cout<<book[n]<<endl;
    }
    
    return 0; 
}
View Code
int solve(int init,int now,int next,int step){
    if(init==next)
        return book[now]=step;
    else 
        return book[now]=solve(init,next,a[next],step+1);
}

 

以上是关于cf 595 补题的主要内容,如果未能解决你的问题,请参考以下文章

CF补题

题解Codeforces Round #595 (Div. 3)(CF1249)

4.30-5.1cf补题

CF round416 div2 补题

Codeforces Round #627 (Div. 3) 补题

(补题 CF 455A)Boredom(DP)