题意:

给出无向图.

good way : 仅有两条边只经过一次,余下边全经过两次的路

问你共有多少条不同的good way。

两条good way不同仅当它们所经过的边的集合中至少有一条不同 (很关键)

存在多个边连通分量的情况肯定是0.

当确定某两条边只经过一次的时候:

由于经过边的顺序不重要,余下边全经过两次,至多只有一条good way

那么把剩下经过两次的边拆分成两条经过一次的边,记现在的图是新图

原图中是否存在good way 就等价于新图中是否存在欧拉路

暴力枚举两条边判断肯定是要TLE的

那就要考虑怎样的两条边存在解

先不考虑自环:

当这两条边不相邻时:

由于只有这两条边的端点的度是奇数,其他点都是偶数,新图中共有四个点是奇数度,不存在欧拉路

当这两条边相邻时:

这两条边的三个端点中两个是奇数,余下都是偶数,存在欧拉回路

考虑自环

当其中有一条边是自环时:

自环只有一个端点,故自环的端点是偶数度,新图中只有两个奇数度点,存在欧拉回路

当两条边都是自环时:

所有点都是偶数度,存在欧拉回路

故存在解的情况:

两条边相邻 (去掉自环后的边):

枚举每个端点i, ans += Comb(edge[i].size(), 2);

其中一条边是自环:

ans += loopCnt * (m-1);

ans -= Comb(loopCnt, 2);//重复计算

 #include <bits/stdc++.h>
using namespace std;
#define LL long long
const int MAXN = ;
int n, m;
vector<int> G[MAXN];
int loop[MAXN], lcnt;
int vis[MAXN];
void dfs(int x)
{
if (vis[x]) return;
vis[x] = ;
for (int i = ; i < G[x].size(); i++)
dfs(G[x][i]);
}
int main()
{
for (int i = ; i <= n; i++)
G[i].clear(), vis[i] = loop[i] = ;
lcnt = ;
scanf("%d%d", &n, &m);
int root;
for (int i = ; i <= m; i++)
{
int x, y; scanf("%d%d", &x, &y);
if (x == y) loop[x]++ ,lcnt++;
else
{
G[x].push_back(y);
G[y].push_back(x);
}
root = x;
}
dfs(root);
bool flag = ;
for (int i = ; i <= n; i++)
{
if (!vis[i] && (G[i].size() || loop[i]))
flag = ;
}
if (!flag)
{
puts(""); return ;
}
LL ans = ;
for (int i = ; i <= n; i++)
{
int sz = G[i].size();
ans += (LL)sz*(sz-) / ;
}
ans += (LL)lcnt * (m-);
ans -= (LL)lcnt * (lcnt-) / ;
printf("%lld\n", ans);
}

CodeForces 788B - Weird journey [ 分类讨论 ] [ 欧拉通路 ]的更多相关文章

  1. CodeForces - 788B Weird journey 欧拉路

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

  2. HDU 5883 F - The Best Path 欧拉通路 & 欧拉回路

    给定一个图,要求选一个点作为起点,然后经过每条边一次,然后把访问过的点异或起来(访问一次就异或一次),然后求最大值. 首先为什么会有最大值这样的分类?就是因为你开始点选择不同,欧拉回路的结果不同,因为 ...

  3. ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)

    判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...

  4. POJ 1300 欧拉通路&欧拉回路

    系统的学习一遍图论!从这篇博客开始! 先介绍一些概念. 无向图: G为连通的无向图,称经过G的每条边一次并且仅一次的路径为欧拉通路. 如果欧拉通路是回路(起点和终点相同),则称此回路为欧拉回路. 具有 ...

  5. poj 2513 连接火柴 字典树+欧拉通路 好题

    Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 27134   Accepted: 7186 ...

  6. poj2513- Colored Sticks 字典树+欧拉通路判断

    题目链接:http://poj.org/problem?id=2513 思路很容易想到就是判断欧拉通路 预处理时用字典树将每个单词和数字对应即可 刚开始在并查集处理的时候出错了 代码: #includ ...

  7. hdu1116有向图判断欧拉通路判断

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  8. Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash

    题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点   或者 ...

  9. 欧拉回路&欧拉通路判断

    欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次, 称这条回路为欧拉回路.具有欧拉回路的图成为欧拉图. 判断欧拉通路是否存在的方法 ...

随机推荐

  1. row_number()、rank()、dense_rank()排序方式的区别

    1.row_number() 排序策略,连续排序,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,例如1,2,3,4   SELECT names,dept,row_number() OV ...

  2. Kick Start 2019 Round H. Elevanagram

    设共有 $N = \sum_{i=1}^{9} A_i$ 个数字.先把 $N$ 个数字任意分成两组 $A$ 和 $B$,$A$ 中有 $N_A = \floor{N/2}$ 个数字,$B$ 中有 $N ...

  3. django进阶版1

    目录 字段中choice参数 MTV与MVC模型 AJAX(*********) Ajax普通请求 Ajax传json格式化数据 Ajax传文件 序列化组件 Ajax+sweetalert 字段中ch ...

  4. Linux的一个后门引发对PAM的探究

    转自http://www.91ri.org/16803.html 1.1   起因 今天在搜索关于Linux下的后门姿势时,发现一条命令如下:软链接后门: 1 ln -sf /usr/sbin/ssh ...

  5. MHA原理及搭建

    MYSQL5.7下搭建MHA 环境说明 在主机1,主机2,主机3上安装MySQL服务端和客户端. 主机1 主机2 主机3 操作系统 CentOS7.4 CentOS7.4 CentOS7.4 主机名 ...

  6. 如何编写正确且高效的 OpenResty 应用

    本文内容,由我在 OpenResty Con 2018 上的同名演讲的演讲稿整理而来. PPT 可以在 这里 下载,因为内容比较多,我就不在这里一张张贴出来了.有些内容需要结合 PPT 才能理解,请多 ...

  7. 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践

    计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局   版 ...

  8. 树莓派安装SSH

    1. 安装ssh sudo apt-get install openssh-server 2. 检查树莓派SSH服务是否开启 ps -e|grep ssh 3. SSH服务开启 sudo /etc/i ...

  9. 面试常考的js题目(二)

    1. 已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件: 返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数) 调用 a 之后,返回一个函数 ...

  10. (一)初识JavaFX

    JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计.创建.测试.调试和部署富客户端程序,并且和Java一样跨平台. JavaFX应用程序 由于JavaFX库被写成了Java API ...