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);//!!!TLEcin>>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. 图论--欧拉路,欧拉回路(小结)

    在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...

  2. 小A与欧拉路(牛客-树的直径)

    题解: 欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次 问你走完这树上所有的点最短路径是什么. 因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一 ...

  3. 图论-欧拉路(UVA10054)(HDU1116)

    首先说一下定义: 欧拉路:从图中某点出发可以遍历全图,图中的每条边通过且只能通过一次. 欧拉回路:具有欧拉路性质且起点位置与终点位置相同. 主要问题就是一个图中是否存在欧拉路,和打印欧拉路路径. 先说 ...

  4. 模板 - 欧拉路、欧拉回路(一笔画问题)

    整理的算法模板合集: ACM模板 目录 非递归版 普通递归版 HierholzersHierholzersHierholzers算法(输出字典序最小的答案) FleuryFleuryFleury算法 ...

  5. 欧拉回路与欧拉路(模板)

    欧拉回路 欧拉图: 就是从任意一个点开始都可以一笔画完整个图 半欧拉图: 必须从某个点开始才能一笔画完整个图. 对于无向图 , 是欧拉图当且仅当 是连通的且没有奇度顶点. 对于无向图 , 是半欧拉图当 ...

  6. [欧拉路]CF1152E Neko and Flashback

    1152E - Neko and Flashback 题意:对于长为n的序列c和长为n - 1的排列p,我们可以按照如下方法得到长为n - 1的序列a,b,a',b'. ai = min(ci, ci ...

  7. hihoCoder #1182 欧拉路·三 (变形)

    题意: 写出一个环,环上有2^n个格子,每个格子中的数字是0或1,相连着的n个格子可以组成一个数的二进制,要求给出这2^n个数字的序列,使得组成的2^n个数字全是不同的.(即从0到2^n-1) 思路: ...

  8. CF788B Weird journey

    总共有n个节点,m条路径,要求其中m-2条路径走两遍,剩下2条路径仅走一遍,问不同的路径总数有多少,如果仅走一遍的两条边不同则将这两条路径视为不同. 可以把每条边都拆成两条重边,每条边的度数都是偶数了 ...

  9. hihocder 1181 : 欧拉路·二

    因为相连的两个数字总是相同的,不妨我们只写一次,那么这个例子可以写成:3-2-4-3-5-1.6个数字刚好有5个间隙,每个间隙两边的数字由恰好对应了一块骨牌. 如果我们将每一个数字看作一个点,每一块骨 ...

最新文章

  1. 太强了!阿里技术团队重磅开放 《Java 开发手册》(附下载地址)!
  2. 从一次react异步setState引发的思考
  3. 如何用纯 CSS 创作一个方块旋转动画
  4. tiny4412初期环境搭建
  5. 决定c++语言中函数的返回值类型的是,全国2009年10月高等教育自学考试C++程序设计试题及部分参考答案...
  6. 拓端tecdat|scrapy爬虫框架和selenium的使用:对优惠券推荐网站数据LDA文本挖掘
  7. IPv6/IPv4 + aliddns 实现黑群晖外网控制和访问
  8. CS61C Spring 2021——Project 3: CS61CPU要求及实现思路
  9. 怎样制作传奇私服服务器,新手传奇gm必须学会如何制作传奇私服小地图
  10. 静坐常思己过 闲谈莫论人非
  11. 谷歌新工具AdID将垄断追踪数据
  12. 【Scala笔记——道】Scala 隐式Implicit
  13. 识字水平测试软件,3000字良心测评,市面上最火的3款识字App,这款最便宜好用...
  14. matlab 插值生成曲面,[转]Matlab曲面拟合和插值
  15. 三人成虎,概率却不足十分之五?几个贝叶斯推理故事的分享
  16. DataSketches HLL Sketch module
  17. 2022年苹果二手报价最新
  18. 声纹技术(一):声纹技术的前世今生
  19. python scripts文件夹里面没有pip.exe怎么办?
  20. win10桌面图标有小白标_白标移动应用程序,带有react native和babel

热门文章

  1. linux程序没有对日志文件写的权限_好程序员云计算培训分享Linux文件权限简单说明...
  2. vue判断列表中包含某一项_判断字符串中是否包含某个字符串
  3. 使用双向链表构建二叉树_python:26.二叉搜索树与双向链表
  4. linux手术后10年,经历正颌手术10年后遗症的我想说40岁做正颌手术我很后悔
  5. java修炼之道_《Java程序员修炼之道》
  6. 年薪50万的程序员_985程序员年薪50万,看似风光,但当事人却想转行
  7. 电位器替换遥控器做远程遥控方案,远程控制云台方案
  8. 利用Nginx对不同的域名进行解析
  9. Redis在项目中的使用及性能测试(续)
  10. 计算机中那些事儿(四):我眼中的虚拟技术