Codeforces 369 D.Directed Roads(数学,判断图中每个环的边数)
来源:互联网 发布:samba windows 无权限 编辑:程序博客网 时间:2024/05/22 03:19
题解:
这里需要判断图中每个环具有的边数目,对于每个环,如果有s条边,那么这个环的变换方式有2^s-2种,而对于不在环上的边,换与不换都可以。
判断图中每个环具有的边数目的方法详见代码,至于为什么这样,可以画一画图或者看看cf上数据画一画就会懂了.
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const ll mod=1e9+7;const int maxn=200000+100;int a[maxn],vis[maxn];ll get(int num){ll ans=1,p=2;while(num){if(num&1)ans=(ans*p)%mod;p=(p*p)%mod;num/=2;}return ans;} int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);ll ans=1;memset(vis,0,sizeof(vis));int cnt=0;int nn=n;for(int i=1;i<=n;i++){if(!vis[i]){int x=i;int now=cnt;while(!vis[x]){vis[x]=++cnt;x=a[x];}if(vis[x]>now){int num=cnt-vis[x]+1;ans=(ans*(get(num)-2+mod))%mod;nn-=num;}}}ans=(ans*get(nn))%mod;printf("%I64d\n",ans);}
0 0
- Codeforces 369 D.Directed Roads(数学,判断图中每个环的边数)
- Codeforces #369 div2 D.Directed Roads
- codeforces 711D. Directed Roads 找环
- Codeforces 711D Directed Roads
- codeforces 711D Directed Roads
- Codeforces Round #369 (Div. 2) D. Directed Roads (dfs+组合数学 图论)
- CodeForces-711D Directed Roads(拓扑排序+组合数)
- 【Codeforces Round #369 (Div. 2)】Codeforces 711D Directed Roads
- 【Codeforces 711 D D. Directed Roads】 + DFS
- Codeforces Round #369 (Div. 2) [D] Directed Roads
- CodeForces 369 div2 D Directed Roads 图论 数论
- Codeforces Round #369 (Div. 2) 711D Directed Roads (dfs)
- Codeforces Round #369 (Div. 2) D. Directed Roads
- Codeforces Problem 711D Directed Roads(Tarjan判环)
- Codeforces 711D Directed Roads dfs(找环)
- Codeforces 711D Directed Roads(所有点出度为1的图反向边去环)
- Codeforces Round #369 (Div. 2) -- D. Directed Roads (DFS找环)
- Codeforces Round #369 (Div. 2) D. Directed Roads —— DFS找环 + 快速幂
- 欢迎使用CSDN-markdown编辑器
- bzoj2038(小z的袜子——莫队)
- 图片格式与设计那点事儿
- python中的万能参数
- 通过反编译深入理解Java String及intern
- Codeforces 369 D.Directed Roads(数学,判断图中每个环的边数)
- 事务
- js小笔记
- Hdu 5853 Jong Hyok and String
- java用freemarker导出word
- 极客 - 博文3 - 菲波那切数列之递归改进版
- hbase安装文档
- 《java多线程编程核心技术》读书笔记2.1
- 浅谈字节对齐