传送门: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. 【转】巫师3:狂猎(The Witcher 3: Wild Hunt )的游戏事件工作流

    转自腾讯游戏开发者平台(GAD) CDPROJEKT RED的主程序.Piotr Tomsinski 在GDC2016的最后一天18号,CDPROJEKT RED的主程Piotr Tomsinski, ...

  2. 【转】Haml 这货是啥? 附参考

    Haml是一种用来描述任何XHTML web document的标记语言,它是干净,简单的.而且也不用内嵌代码.Haml的职能就是替代那些内嵌代码的page page templating syste ...

  3. JavaScript 数组操作方法 和 ES5数组拓展

    JavaScript中数组有各种操作方法,以下通过举例来说明各种方法的使用: 数组操作方法 push 在数组最后添加一个元素 var arr=[3,4,5,6] console.log(arr) // ...

  4. 【转载】完全版线段树 by notonlysuccess大牛

    原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...

  5. Linux下安装paramiko

    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台, ...

  6. BZOJ 3790 神奇项链 hash/后缀自动机+贪心

    Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字母组成的字符串,每个小写字母表示一种颜色. 为了制作这个项链,小 H 购买了两个机器.第一个机器可 ...

  7. Coursera:Internet History ,Techornology and Security

    WEEK1 War Time Computing and Communication Bletchley Park 布莱彻利庄园:a top-secret code breaking effort b ...

  8. aria2 on ubuntu

    http://www.5yun.org/9102.html http://jpollo.logdown.com/posts/160847-aria2c-and-yaaw aria2c --enable ...

  9. iOS开发NS_ENUM和NS_OPTIONS区别

    OC里枚举的两种类型.NS_ENUM和NS_OPTIONS本质上是一样的都是枚举. typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { UI ...

  10. 软工网络15团队作业4——Alpha阶段敏捷冲刺-2

    一.当天站立式会议照片: 二.项目进展 昨天已完成的工作: 微信公众号平台注册"小程序"的账号; 下载微信官方的小程序开发工具,这个是编辑小程序和上传审核小程序必须的工具; 大家一 ...