CF788B Weird journey 欧拉路径+计数
给定一张 $n$ 个点 $m$ 条无向边的图(无重边) :定义一种行走方案为:$m-2$ 条边走 $2$ 次,其余 $2$ 条边只走一次.
两个行走方案不同,当且仅当走一次的两条边中有不同的.
一条边走两次不好处理,可以将每条无向边拆开,然后将问题转换成:有多少种方案使得图中两条边不走的一笔画?
我们知道,对于无向图一笔画的条件是度数为奇数的点不能超过两个,而我们将所有无向边都拆成两个无向边时所有点度数肯定都是偶数的.
因为所有点度数都是偶数,所以如果拆掉一条边,一定会使这条边相连两点度数都变成奇数.
假如说我们拆掉的边不是自环,那么对于另一条需要被删掉的边,可以是自环也可以是这条边所连两个扩展出的所有边(需抛出掉枚举到的这个,就是 -2)
假如说枚举到的是自环,那么是不改变度数的奇偶性的,剩下的那条边随便选一条就行了,有 $(m-1)$ 种选法.
#include <bits/stdc++.h>
#define N 1000005
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int p[N],deg[N],from[N],to[N],vis[N],n,m;
int find(int x)
{
return p[x]==x?x:p[x]=find(p[x]);
}
int main()
{
ll ans=0;
int i,j,sum=0,tp=0;
// setIO("input");
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) p[i]=i;
for(i=1;i<=m;++i)
{
int u,v;
scanf("%d%d",&u,&v);
from[i]=u, to[i]=v;
vis[u]=vis[v]=1;
if(u==v)
{
++sum;
}
else
{
++deg[u], ++deg[v];
u=find(u), v=find(v);
if(u!=v) p[u]=v, tp=v;
}
}
for(i=1;i<=n;++i)
if(vis[i]&&find(i)!=tp)
{
printf("0\n");
return 0;
}
for(i=1;i<=m;++i)
{
if(from[i]==to[i]) ans+=1ll*(m-1);
else
{
ans+=(ll)deg[from[i]]+deg[to[i]]-2+sum;
}
}
printf("%lld\n",ans/2);
return 0;
}
CF788B Weird journey 欧拉路径+计数的更多相关文章
- CF788B Weird journey
总共有n个节点,m条路径,要求其中m-2条路径走两遍,剩下2条路径仅走一遍,问不同的路径总数有多少,如果仅走一遍的两条边不同则将这两条路径视为不同. 可以把每条边都拆成两条重边,每条边的度数都是偶数了 ...
- 【cf789D】Weird journey(欧拉路、计数)
cf788B/789D. Weird journey 题意 n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次.边集不同的路径就是不同的. 题解 将所有非自环的边变成 ...
- 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 ...
- 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 ...
- codeforces 407 div1 B题(Weird journey)
codeforces 407 div1 B题(Weird journey) 传送门 题意: 给出一张图,n个点m条路径,一条好的路径定义为只有2条路径经过1次,m-2条路径经过2次,图中存在自环.问满 ...
- CodeForces - 789D Weird journey
D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- [CF788B]Weird journey_欧拉回路
Weird journey 题目链接:http://codeforces.com/contest/788/problem/B 数据范围:略. 题解: 我们发现就是要求,把每条无向边拆成两条无向边,其中 ...
- Weird journey CodeForces - 788B (路径计数)
大意:$n$结点$m$条边无向图, 满足 $(1)$经过$m-2$条边$2$次 $(2)$经过其余$2$条边$1$次 的路径为好路径, 求所有好路径数 相当于边加倍后再删除两条边, 求欧拉路条数 首先 ...
- Codeforces 789D Weird journey - 欧拉路 - 图论
Little boy Igor wants to become a traveller. At first, he decided to visit all the cities of his mot ...
随机推荐
- C++中的swap(交换函数)
交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如 int temp = a; a = b; b = temp; 不需要 ...
- gin mongodb restful api设计: 动态的patch接口
目录 什么是Patch? Patch方法可以用来更新资源的一个组成部分 什么时候使用Patch? 当你仅需更新资源的某一项,即不完全也不幂等 那当我们的模型在数据库中几乎每个字段都可能会遇到改变的时候 ...
- 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)
原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...
- 【SQL Server DBA】日常巡检语句3:特定监控(阻塞、top语句、索引、作业)
原文:[SQL Server DBA]日常巡检语句3:特定监控(阻塞.top语句.索引.作业) 1.查询阻塞信息.锁定了哪些资源 --1.查看阻塞信息 select spid,loginame,wai ...
- 开发环境,不用每次都ant自动编译
公司所用ant技术,每次改个java文件,配置文件都需要重新编译一次发布 在实际搭环境的过程发现,ant就是把项目目录下的文件编译成功后的搬移到到 ,Tomcat 运行环境配置的目录下,凡是修改的文件 ...
- python处理RSTP视频流
python链接海康摄像头,并以弹出框的方式播放实时视频流, 这种方式是以弹出框的形式播放.本地测试可以,实际业务场景不建议使用.可以采用rtsp转rtmp的方式 @shared_task def p ...
- 关于reduce
arr.reduce( callback,[initialValue]) reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素 callback (执行数组中每个值 ...
- linux:# vi /etc/profile -bash: vi: command not found 的解决办法
/bin/vi /etc/profile 直接用全路径vi,linux下一切皆文件,进去把profile文件内容改一下,一定是profile出了问题 export JAVA_HOME=/usr/jav ...
- Image Processing and Analysis_15_Image Registration:HAIRIS: A Method for Automatic Image Registration Through Histogram-Based Image Segmentation——2011
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- linux 基础10-磁盘配额管理
1. 基本概念 1.1 概念: 在linux系统中,由于是多人多任务的使用环境,所以会有多人共同使用一个硬盘空间的情况,如果其中少数几个人大量使用了硬盘空间的话,势必会压缩其他使用者的使用空间,因此管 ...