[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条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...
随机推荐
- luogu 2152
SuperGcd 二进制算法 1. A = B, Gcd(A, B) = A; 2. A,B为偶数, Gcd(A, B) = 2 * Gcd(A / 2, B / 2); 3. A 为偶数, B 为 ...
- [转]C++重载()(强制类型转换运算符)
在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符. 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过适当重载后,(类型名) ...
- (7)打鸡儿教你Vue.js
计算属性 computed <div id="app"> {{ message.split('').reverse().join('') }} </div> ...
- ROSservice 通信方式
操作演示,对 service 通信的理解请看:点击打开链接 1. 使用 rosservice 1.1 rosservice list 假设小乌龟节点仍在运行 rosrun turtlesim tu ...
- C语言中的多线程
原文:https://www.cnblogs.com/yorkyang/p/7804733.html 线程的优点: 减少系统调度开销,不占有独立的资源,切换速度快,执行效率高. 线程间通信方便,可共享 ...
- rsyslog使用简介
1 把日志打到新的日志文件里面 #### RULES ####ruleset(name="remote"){ action(type="omfile" file ...
- Java核心复习—— 原子性、有序性与Happens-Before
一. 产生并发Bug的源头 可见性 缓存导致的可见性问题 原子性 线程切换带来的原子性问题 有序性 编译优化带来的有序性问题 上面讲到了 volatile 与可见性,本章再主要讲下原子性.有序性与Ha ...
- flutter doctor出现问题 [!] Android toolchain - develop for Android devices (Android SDK version 28.0.3) X Android license status unknown. Try re-installing or updating your Android SDK Manager. 的解决方案
首先,问题描述: flutter doctor Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Cha ...
- JavaScript原型,原型链 ? 有什么特点?
每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时, 如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会 ...
- 环境初始化 Build and Install the Apache Thrift IDL Compiler Install the Platform Development Tools
Apache Thrift - Centos 6.5 Install http://thrift.apache.org/docs/install/centos Building Apache Thri ...