分析:题目非常短,看起来非常难,其实把图一画就明白了.有向图,每个点的出度都是1,那么整个图肯定是环上套链,链上的边无论怎样反向都不会形成环,环上的边也可以随便反向,但是最终不能反为同向的,总方案数减去反成同向的就是答案了.总方案数可以用乘法原理求出来.

#include <bits/stdc++.h>

using namespace std;

const int maxn = ,mod = 1e9+;
int du[maxn],to[maxn],vis[maxn];
int n,cnt;
long long ans,qpow[maxn]; int main()
{
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
queue <int> q;
scanf("%d",&n);
qpow[] = ;
for (int i = ; i <= n; i++)
qpow[i] = (qpow[i - ] * ) % mod;
for (int i = ; i <= n; i++)
{
scanf("%d",&to[i]);
du[to[i]]++;
}
for (int i = ; i <= n; i++)
if (!du[i])
{
q.push(i);
cnt++;
}
while (!q.empty())
{
int u = q.front();
vis[u] = ;
q.pop();
du[to[u]]--;
if (du[to[u]] == )
{
cnt++;
q.push(to[u]);
}
}
ans = qpow[cnt];
for(int i = ; i <= n; i++)
if (!vis[i])
{
cnt = ;
int x = i;
while (!vis[x])
{
cnt++;
vis[x] = ;
x = to[x];
}
ans = (ans * (qpow[cnt] - + mod)) % mod;
}
printf("%lld\n",ans); return ;
}

最新文章

  1. javascript中异步和闭包产生的困惑
  2. [c++] Exceptions
  3. php 5.4中php-fpm 的重启、终止操作命令
  4. Java_Eclipse_Maven插件部署
  5. 解决关于ArcGIS10.2服务手动启动的问题
  6. Android Home键状态保存运用场景
  7. Windows 上远程访问 Unix 的 XWindow / XManager / X
  8. 【Leetcode】 - Single Number II
  9. cocos2d-x 将cocosbuilder输出文件映射成对象的原理
  10. c++通过jnihelper调用java方法刷新androidUI的注意事项
  11. HDOJ 5093 Battle ships 二分图匹配
  12. gradle学习系列之eclipse中简单构建android项目
  13. (2)虚拟机下hadoop1.1.2集群环境搭建
  14. [置顶] Android开发之Thread类分析
  15. Spark性能调优之代码方面的优化
  16. Hadoop-Yarn-框架原理及运作机制
  17. 初读&quot;Thinking in Java&quot;读书笔记之第八章 --- 多态
  18. web 安全:
  19. spring4笔记----spring4国际化
  20. linux 下创建共享文件夹

热门文章

  1. 第四周 Leetcode 124. Binary Tree Maximum Path Sum (HARD)
  2. openStack aio nova service-list neutron ext-list
  3. AJAX-responseXML 属性
  4. Entity Framework 4.3 中使用存储过程
  5. sql 全站搜索
  6. Context的正确使用
  7. Ambari?自动部署Hadoop集群
  8. echarts交叉关系图一
  9. 移动web——touch事件介绍
  10. jQuery——val()、text()、html()