当前位置: 代码迷 >> 综合 >> Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) C. Little Alawn‘s Puzzle
  详细解决方案

Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) C. Little Alawn‘s Puzzle

热度:50   发布时间:2023-11-22 08:04:59.0

C. Little Alawn‘s Puzzle

我的思路:
数据结构知识有限,还没搞很懂,暂时明白了本题转换为n个节点,有n条有向边(我暂时觉得是有向边),组成一个图,之后用深搜在图中找到环。最后用快速幂压缩时间复杂度

复制了一下大佬的代码,图论的知识再去学一学

分类:数学建模,图论,快速幂

大佬的代码:

#include <iostream>
using namespace std;
const int maxn = 4e5+10;
const int mod = 1e9+7;
int vis[maxn],pos[maxn],ans,chu,n;
int a[maxn],b[maxn];
void dfs(int u)
{
    vis[u] = 1;if( b[u]==chu ){
     ans++; return; }dfs( pos[b[u]] ); 
}
int quick(int x,int n)
{
    int ans = 1;for( ; n ; n>>=1,x=1ll*x*x%mod )if( n&1 )	ans = 1ll*ans*x%mod;return ans;
}
int main()
{
    int t; cin >> t;while( t-- ){
    ans = 0;cin >> n;for(int i=1;i<=n;i++)	cin >> a[i];for(int i=1;i<=n;i++)	cin >> b[i], pos[a[i]] = i;for(int i=1;i<=n;i++){
    if( vis[i] )	continue;chu = a[i];dfs( i );}cout << quick(2,ans)%mod << endl;for(int i=1;i<=n;i++)	vis[i] = 0;}return 0;
} 
  相关解决方案