#include #include using namespace atcoder; using namespace std; bool is_subseq(vector a,vector b){ //b は a の部分列か? int idx=0; for(int i=0;i>N; vector A(N),B(N); for(auto& v:A){ cin>>v; v--; } for(auto& v:B){ cin>>v; v--; } //V : サイクルとして採用したか vector V(N); //S : サイクルの集合 vector> S; for(int i=0;i T; auto tmp=i; for(int k=0;k<=j;++k){ T.emplace_back(tmp); V[tmp]=1; tmp=A[tmp]; } assert(tmp==i); S.emplace_back(T); } } if(!f){ cout<<"No"< v1 -> ... -> v{n-1} -> v0 //vi - B[vi] が連結か判定 atcoder::dsu uf(N); for(int i=0;i B[vi] を張ったグラフにおけるサイクルを検出 vector w; for(int i=0;i>T; while(T--){ solve(); } }