cf788B/789D. Weird journey

题意

n个点m条边无重边有自环无向图,问有多少种路径可以经过m-2条边两次,其它两条边1次。边集不同的路径就是不同的。

题解

将所有非自环的边变成两份。然后去掉两条边,看有没有欧拉路。

如果两条边都不是自环,那么只当他们相邻时(共享一个点),剩下的图有两个奇数度的点。有欧拉路。所以第i个点作为共享的点,有\(C(cnt_i,2)\)种路径。

如果其中一个是自环,那么其他m-1条边任意选一个都可以。有loop*(m-1)条,不过每个自环算了两次。所以要减去C(loop,2)。

注意判断一下图是不是联通的,不联通答案是0。

代码

const int N=1001000;
int f[N];
int n,m;
VI e[N];
int find(int x){
return x==f[x]?x:f[x]=find(f[x]);
}
ll loop;
ll ans;
bool o[N];
int main() {
ios::sync_with_stdio(false);//!!!TLE
cin>>n>>m;
rep(i,1,n+1)f[i]=i; int u,v;
rep(i,0,m){
cin>>u>>v;
o[u]=o[v]=1;
if(u==v)++loop;
int fu=find(u),fv=find(v);
if(fu!=fv)f[fu]=fv;
if(u!=v){e[u].pb(v);e[v].pb(u);}
}
rep(i,1,n+1)if(o[i]&&find(i)!=find(u))ans=-1;//o[i]:出现过的点。
if(~ans){
ans=loop*(m-1)-(loop-1)*loop/2;
rep(i,1,n+1)ans+=(ll)(SZ(e[i])-1)*SZ(e[i])/2;
cout<<ans<<endl;
}
else cout<<"0";
return 0;
}

【cf789D】Weird journey(欧拉路、计数)的更多相关文章

  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 ...

  2. 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 ...

  3. CodeForces - 788B Weird journey 欧拉路

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

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

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

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

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

  6. 洛谷P1341 无序字母对[无向图欧拉路]

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  7. POJ1386Play on Words[有向图欧拉路]

    Play on Words Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11846   Accepted: 4050 De ...

  8. hdu1161 欧拉路

    欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...

  9. UVA10054The Necklace (打印欧拉路)

    题目链接 题意:一种由彩色珠子组成的项链.每个珠子的两半由不同的颜色组成.相邻的两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确定他们是否可以复原成完整的项链 分析:之前也没往欧拉路上面想, ...

随机推荐

  1. c++入门之命名空间存在的意义

    看过鸡啄米的C++编程入门系列教程的朋友,应该能注意到,在其中的很多实例中,都有这么一条语句:using namespace std;,即使用命名空间std,其作用就是规定该文件中使用的标准库函数都是 ...

  2. (Beta)团队贡献分

    Beta阶段团队每个成员都积极响应一起完成了开发, 所以最后我们一致决定各个成员的贡献分相同. 林珣玙 53 康家华 52 张启东 51 刘彦熙 49 马瑶华 48 仇栋民 47

  3. PS调出春夏外景婚纱照

    效果图 先来看看原图和夏季的效果图 先看看原图 教程终于来咯 原图暗部太深,需要将暗部提亮.可以把暗部选区选出来.为了精确选择暗部选区,我利用计算命令如上图所示.最后得到暗部的选区. 上图得到了暗部选 ...

  4. 【kindle笔记】读书记录-总

    注:谨以此贴记录各种读书心得的目录.包括纸质书和电子书等等. 我的啃豆 说起来,买啃豆的初心是<鸟哥私房菜> 来自亚马逊中国官网,于公元2017年,在双十一与双十二中间,一千大洋购得 有了 ...

  5. MySQL 查询语句中自己定义的中文内容在Java Web 中显示为问号

    Java Web 端做查询时,性别字段存的是数字,1代表男,2代表女,取数据时将性别转为汉字显示在页面,sql语句如下,结果发生了问题  select a.emp_id,a.emp_name ,cas ...

  6. 【转帖】理解 Linux 的虚拟内存

    理解 Linux 的虚拟内存 https://www.cnblogs.com/zhenbianshu/p/10300769.html 段页式内存 文章了里面讲了 页表 没讲段表 记得最开始的时候 学习 ...

  7. java随笔3 spring 的注入执行逻辑顺序

  8. python之路--BOM和DOM

    一. 介绍 之前学的JS的一些简单的语法并没有和浏览器有任何的交互. 我们要想制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DOM相关知识. JavaScript 分为 ECMAScr ...

  9. sonar安装

    ##jdk不要用yum下载的 一.下载sonar源码 cd /usr/local/src wget https://sonarsource.bintray.com/Distribution/sonar ...

  10. pycharm 安装

    pycharm 1.模板 file->setting->Editor->file and code template->python script->右上方 #!/usr ...