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;
}