传送门:http://codeforces.com/contest/788/problem/B

好题!好题!

首先图不连通的时候肯定答案是0,我们下面讨论图联通的情况

首先考虑,如果我们每条边都经过两边,那么肯定是可行的

因为这样相当于把每条边复制一遍,然后问图中是否存在欧拉路径

既然每条边都出现了两遍,那么所有点的度数一定都是偶数,所以肯定有欧拉路径

现在考虑将某两条边变成出现一遍,这样的话可能会有一些点的度数变成奇数

如果我们把两条非自环的边变成出现一遍,并且这两条边不交于同一个点,那么就会有四个度数为奇数的点,则图中不存在欧拉路径

如果我们把两条非自环的边变成出现一遍,并且这两条边交于同一个点,那么就会有两个度数为奇数的点,存在欧拉路径

如果我们把两条自环边变成出现一遍,所有点的度数仍然为偶数,存在欧拉路径

如果我们把一条自环,一条非自环的边变成出现一遍,那么就会有两个度数为奇数的点,存在欧拉路径

所以一共就几种情况,除去判联通的部分,我们只要记录每个点的度数(不含自环)和自环的数量就好了

因为题目中保证一条边不会出现两遍,所以我们的方法才是可行的

代码:

 #include <bits/stdc++.h>

 using namespace std;
typedef long long ll;
const int MAXN = ; int n, m; namespace Graph {
int head[MAXN], nxt[MAXN<<], to[MAXN<<], eidx;
void init() {
eidx = ;
memset( head, -, sizeof(head) );
}
void adde( int u, int v ) {
to[eidx] = v, nxt[eidx] = head[u], head[u] = eidx++;
}
} bool ing[MAXN] = {}, vis[MAXN] = {}; // ing表示这个点是否存在于图中,因为题目只要求边互相联通,所以对于没有度数的点可以看做不存在
queue<int> q;
bool bfs() { // bfs判联通
using namespace Graph;
for( int i = ; i <= n; ++i )
if( ing[i] ) {
q.push(i), vis[i] = true;
break;
}
while( !q.empty() ) {
int u = q.front(); q.pop();
for( int i = head[u]; ~i; i = nxt[i] ) {
int v = to[i];
if( vis[v] ) continue;
q.push(v), vis[v] = true;
}
}
for( int i = ; i <= n; ++i )
if( ing[i] && !vis[i] )
return false;
return true;
} int deg[MAXN] = {}, loop = ; // 每个点的度数(不含自环)和总的自环数量
int main() {
scanf( "%d%d", &n, &m );
Graph::init();
for( int i = ; i < m; ++i ) {
int u, v; scanf( "%d%d", &u, &v );
ing[u] = ing[v] = true;
if( u != v ) {
Graph::adde(u,v), ++deg[u];
Graph::adde(v,u), ++deg[v];
} else { // 自环
Graph::adde(u,v), ++loop;
}
}
if( !bfs() || m < ) {
puts("");
return ;
}
ll ans = (ll)loop*(m-loop) + (ll)loop*(loop-)/; // 选一个自环和一个非自环,或者选两个自环
for( int i = ; i <= n; ++i )
ans += (ll)deg[i]*(deg[i] - )/; // 选两个非自环,且交于同一点的边
cout << ans << endl;
return ;
}

【题解】Weird journey Codeforces 788B 欧拉路的更多相关文章

  1. Weird journey CodeForces - 788B (路径计数)

    大意:$n$结点$m$条边无向图, 满足 $(1)$经过$m-2$条边$2$次 $(2)$经过其余$2$条边$1$次 的路径为好路径, 求所有好路径数 相当于边加倍后再删除两条边, 求欧拉路条数 首先 ...

  2. CodeForces 788B - Weird journey [ 分类讨论 ] [ 欧拉通路 ]

    题意: 给出无向图. good way : 仅有两条边只经过一次,余下边全经过两次的路 问你共有多少条不同的good way. 两条good way不同仅当它们所经过的边的集合中至少有一条不同 (很关 ...

  3. CodeForces - 788B Weird journey 欧拉路

    题意:给定n个点,m条边,问能否找到多少条符合条件的路径.需要满足的条件:1.经过m-2条边两次,剩下两条边1次  2.任何两条路的终点和起点不能相同. 欧拉路的条件:存在两个或者0个奇度顶点. 思路 ...

  4. Codeforces 789D Weird journey - 欧拉路 - 图论

    Little boy Igor wants to become a traveller. At first, he decided to visit all the cities of his mot ...

  5. Codeforces Round #407 (Div. 2) D. Weird journey(欧拉路)

    D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  6. 【cf789D】Weird journey(欧拉路、计数)

    cf788B/789D. Weird journey 题意 n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次.边集不同的路径就是不同的. 题解 将所有非自环的边变成 ...

  7. Codeforces Round #407 (Div. 1) B. Weird journey —— dfs + 图

    题目链接:http://codeforces.com/problemset/problem/788/B B. Weird journey time limit per test 2 seconds m ...

  8. codeforces 407 div1 B题(Weird journey)

    codeforces 407 div1 B题(Weird journey) 传送门 题意: 给出一张图,n个点m条路径,一条好的路径定义为只有2条路径经过1次,m-2条路径经过2次,图中存在自环.问满 ...

  9. CodeForces - 789D Weird journey

    D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

随机推荐

  1. 397. Longest Continuous Increasing Subsequence

    Description Give an integer array,find the longest increasing continuous subsequence in this array. ...

  2. 227. Mock Hanoi Tower by Stacks【LintCode java】

    Description In the classic problem of Towers of Hanoi, you have 3 towers and N disks of different si ...

  3. 爬虫1.5-ajax数据爬取

    目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 ...

  4. 使用深度学习来破解 captcha 验证码(转)

    使用深度学习来破解 captcha 验证码 本项目会通过 Keras 搭建一个深度卷积神经网络来识别 captcha 验证码,建议使用显卡来运行该项目. 下面的可视化代码都是在 jupyter not ...

  5. Linux中常用的关机和重新启动命令

    hutdown.halt.reboot以及init,它们都可以达到关机和重新启动的目的,但是每个命令的内部工作过程是不同的,下面将逐一进行介绍. 一.shutdown shutdown命令用于安全关闭 ...

  6. ChromeSwitchySharp代理设置步骤

    步骤: 1.新增情景模式配置如下:   2.设置切换规则   3.先“直接连接”进行登录:然后切换到“自动切换模式”访问对应url

  7. javaIO--字节流

    流---是指的一组有序的.有气垫和重点的字节集合,是对的护具传输的总称或者抽象. 流采用缓冲区技术,当写一个数据时,系统将数据发送到缓冲区而不是外部设备(如硬盘),当读一个数据时,系统实际是从缓冲区读 ...

  8. SQL 跨库查询

    使用SQL查询数据,不仅能查询当前库的数据,还可以跨数据库,甚至跨服务器查询. 下面给大家介绍一下跨服务器查询的步骤(以SQL Server为例): 1,建立数据库链接 EXEC sp_addlink ...

  9. 安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

  10. 使用Gulp实现网页自动刷新:gulp-connect

    入门指南 1. 全局安装 gulp: npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: npm install --save-dev ...