Codeforces Round #369 (Div. 2) D 欧拉回路
来源:互联网 发布:西游记 女儿情 知乎 编辑:程序博客网 时间:2024/06/01 10:06
题目传送门: http://codeforces.com/contest/711/problem/D
题意: 一张图,给n个数a1,a2,.....,an,代表从i到ai,这样建一张图,问有多少种不同的集合,改变集合里的边使图不含环
思路:求出图中环的数量n,每个环中元素的个数m,不在环中元素的个数k,答案 ans = (2^m1-2) * (2^m2-2)*......*(2^mn-2) * (2^k)
代码如下:
#include <iostream>#include <algorithm>#include <cstring>#include <stdio.h>#include <string>#include <cmath>#include <queue>#include <set>#include <map>#include <stack>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define ll long long#define ull unsigned long long#define mem(n,v) memset(n,v,sizeof(n))#define MAX 200005#define MAXN 3000#define PI 3.1415926#define E 2.718281828459#define opnin freopen("text.in.txt","r",stdin)#define opnout freopen("text.out.txt","w",stdout)#define clsin fclose(stdin)#define clsout fclose(stdout)#define haha1 cout << "haha1"<< endl#define haha2 cout << "haha2"<< endl#define haha3 cout << "haha3"<< endlconst int INF = 0x3f3f3f3f;const ll INFF = 0x3f3f3f3f3f3f3f3f;const double pi = 3.141592653589793;const double inf = 1e18;const double eps = 1e-8;const ll mod = 1e9+7;const ull mx = 133333331;/**************************************************************************/int vis[MAX];int to[MAX];ll mul[MAX];int dfs(int u,int id){ vis[u] = id; if(!vis[to[u]]) return dfs(to[u],id); else return to[u];}int dfs1(int u,int id){ if(to[u] == id) return 1; else return dfs1(to[u],id) + 1;}void getmul(int n){ mul[0] = 1; for(int i=1;i<=n;i++) mul[i] = (mul[i-1] * 2) % mod;}int main(){ mem(vis,0); mem(to,0); mem(mul,0); int n; cin >> n; getmul(n); for(int i=1;i<=n;i++){ scanf("%d",&to[i]); } ll ans = 1 ll sum = 0; for(int i=1;i<=n;i++){ int cnt = 0; if(!vis[i]){ int x = dfs(i,i); if(vis[x] == i) cnt = dfs1(x,x); } if(cnt > 1){ ans = (ans * ((mul[cnt] - 2 + mod) % mod)) % mod; sum += cnt; } } ans = (ans*mul[n-sum])%mod; cout << ans << endl; return 0;}
0 0
- Codeforces Round #369 (Div. 2) D 欧拉回路
- Codeforces Round #288 (Div. 2) D. Tanya and Password 欧拉回路
- Codeforces Round #375 (Div. 2) E. One-Way Reform 欧拉回路+构图
- [欧拉回路 并查集] Codeforces 547D #305 (Div. 1) D. Mike and Fish
- 【欧拉回路】 Codeforces Round #296 (Div. 1) C - Data Center Drama
- Codeforces Round #288 (Div. 2) D.Tanya and Password(欧拉路径)
- Codeforces Round #288 (Div. 2)D.Tanya and Password——欧拉通路
- Codeforces Round #288 (Div. 2) D. Tanya and Password (欧拉通路)
- Codeforces Round #288 (Div. 2)-D. Tanya and Password(欧拉路径及其打印)
- Codeforces Round #369 (Div. 2) D DFS
- 图中环长-Codeforces Round #369 Div.2-D
- Codeforces Round #369 (Div. 2) A~D
- Codeforces Round #369 (Div. 2) A~D
- 【Codeforces Round #369 (Div. 2)】Codeforces 711D Directed Roads
- CodeForces 21D Traveling Graph 状压dp+欧拉回路
- 【欧拉回路】 Codeforces 288 D Tanya and Password
- codeforces #547D Mike and Fish 欧拉回路
- 【欧拉路】codeforces #547D Mike and Fish 欧拉回路
- Java垃圾回收小结
- Spring之Bean在BeanFactory的生命周期
- 编程
- 程序代中异或计算公式和计算器中的不同
- 记忆
- Codeforces Round #369 (Div. 2) D 欧拉回路
- Leetcode 246. Strobogrammatic Number
- LeetCode 397. Integer Replacement
- 对SQL简单介绍、数据库、表的简单操作
- Servlet实例一
- js动态绑定
- 欢迎使用CSDN-markdown编辑器
- springmvc注解开发-validation校验
- don't run elasticsearch as root.