Codeforces 788B Weird journey(欧拉回路)
来源:互联网 发布:os系统教程加装windows 编辑:程序博客网 时间:2024/05/28 01:36
题意
n 个点和m 条路,求m−2 条边经过两次,2 条边经过一次的路有多少种。(无重边)
分析
先要判断除去孤点后,图是否联通,不联通则为
0 。先考虑每条路都走两遍,则每条边复制一遍,因此每个点的度都为偶数,则必有欧拉回路。
再删除两条边,看是否还是欧拉通路,则有以下四种情况:
①删去的2条边都是自环:删去后所有的点的度仍然是偶数,成立。
②删去的2条边中一条是自环:删去后只有2个点的度是奇数,成立。
③删去的2条边不是自环,且有公共点:删去后只有2个点的度是奇数,成立。
④删去的2条边不是自环,且无公共点:删去后有4个点的度是奇数,不成立。所以只要累加前三种情况则是答案。
枚举每条边。
为非自环的边,ans+=两个点所连边数−2+自环数 ;
为自环的边,ans+=m−1 。(任意去掉另一条边都可以)
最后将ans/2 去掉重复情况。
代码
#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<cctype>#include<set>#include<map>#include<queue>#include<stack>#include<iomanip>#include<sstream>#include<limits>#define ll long long#define inf 0x3f3f3f3fusing namespace std;const ll INF = 1e18;const int maxn = 2e6+10;const ll MOD = 1000000007;const double EPS = 1e-10;const double Pi = acos(-1.0);struct Edge{ int u,v;}a[maxn];vector<int>G[maxn];int inq[maxn];bool vis[maxn];void dfs(int u){ vis[u] = true; for(int i = 0; i < G[u].size(); i++) { int to = G[u][i]; if (!vis[to]) dfs(to); }}int main(){#ifdef LOCAL //freopen("C:\\Users\\lanjiaming\\Desktop\\acm\\in.txt","r",stdin); //freopen("output.txt","w",stdout);#endif//ios_base::sync_with_stdio(0); int n,m,loop = 0; cin>>n>>m; int root; for(int i = 1;i <= m; i++) { int x,y; scanf("%d%d",&x,&y); a[i].u=x;a[i].v=y; if (x != y) { G[x].push_back(y); G[y].push_back(x); }else loop++; inq[x]++; inq[y]++; root = x; } dfs(root); for(int i = 1;i <= n;i++) if(!vis[i]&&inq[i]!=0) { puts("0"); return 0; } ll ans = 0; for(int i = 1; i <= m; i++) { int x = a[i].u; int y = a[i].v; if (x!=y) ans += G[x].size()-1+G[y].size()-1+loop; else ans += m-1; } cout<<ans/2<<endl; return 0;}
0 0
- Codeforces-788B Weird journey(计数/欧拉回路)
- Codeforces 788B Weird journey(欧拉回路)
- Codeforces-788B Weird journey 欧拉回路
- Codeforces 788B Weird journey (欧拉回路 组合数计数)
- codeforces 788B Weird journey (欧拉路)
- codeforces 788B Weird journey (欧拉路)
- CodeForces 788B Weird journey
- (CF 788) B. Weird journey 欧拉通路 + dfs判断图的连通性
- [欧拉路] Codeforces Round #407 (Div. 1) 788B. Weird journey
- Codeforces Round #407 (Div. 1) B. Weird journey
- Codeforces Round #407 (Div. 1) B. Weird journey
- codeforces 789 D. Weird journey (欧拉路计数)
- CodeForces 788B 浅谈并查集维护奇妙欧拉回路
- 【CodeForces 779B】Weird Rounding(模拟)
- Codeforces Round #407 (Div. 1) B. Weird journey —— dfs + 图
- Codeforces 789D Weird Journey 欧拉图(计数)
- CodeForces 527E Data Center Drama(欧拉回路)
- 【codeforces 779B】Weird Rounding
- 《TensorfFlow实战》读书笔记(一) —— Tensorflow 基础
- ubuntu 命令罗列
- 【总介】C#Winform的特效库MyAE-郑与天的博
- pwnable.kr之leg ARM指令初步了解
- 《思科网络基础知识》学习笔记II—网络编址.ipv4&ipv6
- Codeforces 788B Weird journey(欧拉回路)
- 九度OJ题目1052:找x
- 蓝桥 滑动解锁
- win10 无法连接Jlink
- ZOJ3714 Java Beans(水题,滚动数组)
- [LeetCode]383. Ransom Note(赎金票据)
- Linux中的gcc
- 林子雨—大数据技术原理与引用—上机实验一
- 高光BRDF 公式参考