https://codeforces.com/contest/1249/problem/B2
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int q;//n < 2e5
int n, i;
while(scanf("%d", &q) != EOF){
scanf("%d", &n);
i = 0;
vector<int> p(n);//默认初始化,有n个元素,每个元素都是0
for(int i = 0; i < n; ++i){
cin >> p[i];
--p[i];
}
vector<int> used(n),//*
ans(n); //*默认初始化有n个元素,每个元素都是0
for(int j = 0; j < n; ++j){
if(!used[j]){
vector<int> cur;
while(!used[j]){
cur.push_back(j);//把孩子放到对应的周期中去
used[j] = 1;
j = p[j];//将书传给下一个小盆友
}
//下面的for循环表示第el个小朋友所在的周期,即天数
for(auto &el : cur)//el是“第el个小朋友”
ans[el] = cur.size();//cur的元素个数就是周期,即天数
}
}
//如果used[j]已经被赋周期值
for(int j = 0; j < n; ++j)
cout << ans[j] << " ";
cout