给定一张 $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;
}

  

最新文章

  1. 蓝屏 Dump文件分析方法
  2. 使用delphi+intraweb进行微信开发4—微信消息加解密
  3. 多功能节点连线绘图控件Nevron Diagram for .NET使用方法及下载地址
  4. sql 学习笔记 p46
  5. CSS 总结
  6. iOS开源库--最全的整理
  7. shell中的Mysql查询
  8. BUAA-OO-第二单元总结
  9. spring cloud+.net core搭建微服务架构:Api网关(三)
  10. sock_ntop.c
  11. 3、使用keepalived高可用LVS实例演示
  12. C++定义自己的异常
  13. visual studio的试用版评估期已结束 解决办法
  14. Nessus漏洞扫描教程之使用Nmap工具扫描识别指纹
  15. VTK7.0.0编译安装心得
  16. java+ajax实例
  17. Python语音合成
  18. hdu5012 圆环相交面积
  19. nats
  20. 工作中,ES6 可能掌握这些就足够了

热门文章

  1. 剑指Offer(4)——替换空格
  2. 如何使用JavaScript实现纯前端读取和导出excel文件(转)
  3. CentOS7离线安装Nginx(详细安装过程)
  4. ajax post上传数据时,前端出现的跨域权限问题:ccess to XMLHttpRequest at ‘’rom origin &#39;null&#39; has been blocked by CORS policy: Response to preflight request doesn&#39;t pass access control check: It does not have HTTP ok st
  5. (九)mybatis之延迟加载
  6. 在Angular中使用$ compile
  7. 上传文件-layui+ashx
  8. JS OOP -02 深入认识JS中的函数
  9. 前端开发 Vue -1windows环境搭建Vue Node开发环境
  10. C++ sizeof(struct) 的注意