清北学堂模拟赛d5t4 套路
2024-08-31 02:24:46
分析:题目非常短,看起来非常难,其实把图一画就明白了.有向图,每个点的出度都是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 ;
}
最新文章
- javascript中异步和闭包产生的困惑
- [c++] Exceptions
- php 5.4中php-fpm 的重启、终止操作命令
- Java_Eclipse_Maven插件部署
- 解决关于ArcGIS10.2服务手动启动的问题
- Android Home键状态保存运用场景
- Windows 上远程访问 Unix 的 XWindow / XManager / X
- 【Leetcode】 - Single Number II
- cocos2d-x 将cocosbuilder输出文件映射成对象的原理
- c++通过jnihelper调用java方法刷新androidUI的注意事项
- HDOJ 5093 Battle ships 二分图匹配
- gradle学习系列之eclipse中简单构建android项目
- (2)虚拟机下hadoop1.1.2集群环境搭建
- [置顶] Android开发之Thread类分析
- Spark性能调优之代码方面的优化
- Hadoop-Yarn-框架原理及运作机制
- 初读";Thinking in Java";读书笔记之第八章 --- 多态
- web 安全:
- spring4笔记----spring4国际化
- linux 下创建共享文件夹