[CF788B]Weird journey_欧拉回路
Weird journey
题目链接:http://codeforces.com/contest/788/problem/B
数据范围:略。
题解:
我们发现就是要求,把每条无向边拆成两条无向边,其中有两条拆成一条,问这个图有没有欧拉回路。
无向图欧拉回路的充要条件是度数为奇数的点数等于$0$或者$2$。
那么我们的删边方式就分成了三种:
第一种,删任意两个自环。
第二种,删一个自环和任意一条边。
第三种,删两条有公共端点的边,
随便枚举一下就行。
代码:
#include <bits/stdc++.h> #define N 1000010 using namespace std; typedef long long ll; char *p1, *p2, buf[100000]; #define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ ) int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
} int n, m, t; ll d[N]; int zh[N]; bool vis[N]; int tot, head[N], nxt[N << 1], to[N << 1]; inline void add(int x, int y) {
to[ ++ tot] = y;
nxt[tot] = head[x];
head[x] = tot;
} void dfs(int p) {
vis[p] = true;
for (int i = head[p]; i; i = nxt[i]) {
if (!vis[to[i]]) {
dfs(to[i]);
}
}
} int main() {
n = rd(), m = rd();
for (int i = 1; i <= m; i ++ ) {
int x = rd(), y = rd();
add(x, y), add(y, x);
if (x == y) {
t ++ , zh[x] ++ ;
continue;
}
d[x] ++ , d[y] ++ ;
}
for (int i = 1; i <= n; i ++ ) {
if (d[i]) {
dfs(i);
break;
}
}
for (int i = 1; i <= n; i ++ ) {
if (!vis[i]) {
if (d[i] || zh[i]) {
puts("0");
return 0;
}
}
}
ll ans = 0;
ans += (ll)t * (t - 1) / 2;
ans += (ll)t * (m - t);
for (int i = 1; i <= n; i ++ ) {
if (d[i] >= 2) {
ans += (ll)d[i] * (d[i] - 1) / 2;
}
}
cout << ans << endl ;
return 0;
}
[CF788B]Weird journey_欧拉回路的更多相关文章
- CF788B Weird journey
总共有n个节点,m条路径,要求其中m-2条路径走两遍,剩下2条路径仅走一遍,问不同的路径总数有多少,如果仅走一遍的两条边不同则将这两条路径视为不同. 可以把每条边都拆成两条重边,每条边的度数都是偶数了 ...
- CF788B Weird journey 欧拉路径+计数
给定一张 $n$ 个点 $m$ 条无向边的图(无重边) :定义一种行走方案为:$m-2$ 条边走 $2$ 次,其余 $2$ 条边只走一次. 两个行走方案不同,当且仅当走一次的两条边中有不同的. 一条边 ...
- 【cf789D】Weird journey(欧拉路、计数)
cf788B/789D. Weird journey 题意 n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次.边集不同的路径就是不同的. 题解 将所有非自环的边变成 ...
- ACM/ICPC 之 混合图的欧拉回路判定-网络流(POJ1637)
//网络流判定混合图欧拉回路 //通过网络流使得各点的出入度相同则possible,否则impossible //残留网络的权值为可改变方向的次数,即n个双向边则有n次 //Time:157Ms Me ...
- [poj2337]求字典序最小欧拉回路
注意:找出一条欧拉回路,与判定这个图能不能一笔联通...是不同的概念 c++奇怪的编译规则...生不如死啊... string怎么用啊...cincout来救? 可以直接.length()我也是长见识 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- UVA 10054 the necklace 欧拉回路
有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...
- POJ 1637 混合图的欧拉回路判定
题意:一张混合图,判断是否存在欧拉回路. 分析参考: 混合图(既有有向边又有无向边的图)中欧拉环.欧拉路径的判定需要借助网络流! (1)欧拉环的判定:一开始当然是判断原图的基图是否连通,若不连通则一定 ...
- codeforces 723E (欧拉回路)
Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...
随机推荐
- NetworkX系列教程(7)-对graph进行分析
小书匠Graph图论 graph构建完成后,对graph的连通等属性进行分析. 目录: 8.对图进行分析 8.1连通子图 8.2弱联通 8.3强连通 8.4子图 8.5条件过滤 注意:如果代码出现找不 ...
- 遇到bug如何处理
issue中查询是否有相似bug assert / try-except / IDE单步调式 框架可以查询源码或者查询官方文档
- FOI 冬令营 Day6
目录 T1.堆(heap) 传送门 Code T2.密文(secret) 传送门 Code T3.树(tree) 传送门 Code 别问Day5到底去哪里了,咕咕咕 T1.堆(heap) 传送门 Co ...
- python生成二维码(简易)
首先要的配置: pillow image qrcode zxing 然后直接上代码: import PIL import qrcode # 实例化二维码生成类 qr = qrcode.QRCode( ...
- 小程序if和style,image中src的渲染用法,基本写法
https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/data.html
- spring cloud 常见面试题 来理解微服
为什么要谈 这些理论知识呢 理论知识 = 面试时候的谈资 !!! 你只有 进去公司 才有资格 去做一个码农 ok 话不多说 经历如此漫长的互联网发展 以本人的拙见 软件开发 粗略的 分为 ...
- 2018-2019-2 网络对抗技术 20165222 Exp 8 Web基础
1.实践内容 (1).Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. 使用service apache2 start启 ...
- Cesium的Property机制总结
前言 Cesium官方教程中有一篇叫<空间数据可视化>(Visualizing Spatial Data).该文文末简单提到了Cesium的Property机制,然后话锋一转,宣告此教程的 ...
- OpenJudge计算概论-奥运奖牌计数
/*===================================================================== 奥运奖牌计数 总时间限制: 1000ms 内存限制: 6 ...
- 总结解决 Android-Studio 编译耗时(好久、太长)问题
首先通过搜索有关Android-Studio 编译耗时(好久.太长)问题的博客,速度确实有所改善. 一.暂时解决 Android-Studio 编译耗时(好久.太长)问题 本文链接:https://b ...