题目链接


\(Description\)

给定一张\(n\)个点\(m\)条边的无向图,允许有自环重边。求最少加多少条边后,其存在从\(1\)出发最后回到\(1\)的欧拉回路。

注意,欧拉回路是指要经过所有边,无边(边包括自环)连向的孤立点不需要考虑。但是\(1\)一定要经过。

\(n,m\leq10^6\)。

\(Solution\)

如果图连通,奇度数点两两连边即可。

如果图不连通,对于每个奇度数点需要向外连一条边;没有奇度数点的连通块就随便找一个点往外连两条边。另外强制选\(1\)即可。

答案是统计的边数除以\(2\)。


//218ms	32600KB
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 500000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e6+6; int Enum,H[N],nxt[N<<1],to[N<<1],fa[N],dgr[N],cnt[N];
bool tag[N];
char IN[MAXIN],*SS=IN,*TT=IN; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
inline void AE(int u,int v)
{
to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
int Find(int x)
{
return x==fa[x]?x:fa[x]=Find(fa[x]);
} int main()
{
const int n=read(),m=read();
for(int i=1; i<=n; ++i) fa[i]=i;
tag[1]=1;
for(int i=1,u,v; i<=m; ++i)
{
int r1=Find(u=read()),r2=Find(v=read());
fa[r1]=r2, ++dgr[u], ++dgr[v], tag[u]=tag[v]=1;
}
for(int i=1; i<=n; ++i) cnt[Find(i)]+=dgr[i]&1;
int ans=0,two=0,tot=0;
for(int i=1; i<=n; ++i)
if(tag[i] && Find(i)==i)
{
++tot;
if(cnt[i]) ans+=cnt[i];
else ++two;
}
printf("%d\n",tot==1?ans>>1:(ans>>1)+two); return 0;
}

Codeforces.209C.Trails and Glades(构造 欧拉回路)的更多相关文章

  1. CodeForces 209C Trails and Glades

    C. Trails and Glades time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  2. Codeforces 209 C. Trails and Glades

    Vasya went for a walk in the park. The park has n glades, numbered from 1 to n. There are m trails b ...

  3. Codeforces 429E - Points and Segments(欧拉回路)

    Codeforces 题面传送门 & 洛谷题面传送门 果然我不具备融会贯通的能力/ll 看到这样的设问我们可以很自然地联想到这道题,具体来说我们可以通过某种方式建出一张图,然后根据" ...

  4. CF527E Data Center Drama(构造+欧拉回路)

    题目链接 大意: 给你一个无向图. 要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数. 输出定向后的边数和边集. n<=10^5 m<=2*10^5 很巧妙的构造题- ...

  5. Educational Codeforces Round 10 B. z-sort 构造

    B. z-sort 题目连接: http://www.codeforces.com/contest/652/problem/B Description A student of z-school fo ...

  6. Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)

    题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...

  7. hdu 4850 字符串构造---欧拉回路构造序列 递归+非递归实现

    http://acm.hdu.edu.cn/showproblem.php? pid=4850 题意:构造长度为n的字符序列.使得>=4的子串仅仅出现一次 事实上最长仅仅能构造出来26^4+4- ...

  8. Codeforces 1246D/1225F Tree Factory (构造)

    题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...

  9. Codeforces - 1202D - Print a 1337-string... - 构造

    https://codeforces.com/contest/1202/problem/D 当时想的构造是中间两个3,然后前后的1和7组合出n,问题就是n假如是有一个比较大的质数因子或者它本身就是质数 ...

随机推荐

  1. java Swing组件和事件处理

    1.常见的容器 JComponent是 Container 的子类,中间容器必须添加到底层容器中才能够发挥作用, JPanel 面板 :使用jPanel 创建一个面板,再通过添加组件到该面板上面,JP ...

  2. Python中什么是深拷贝和浅拷贝且有什么区别

    浅拷贝: >>> a = [1, 2, 3] >>> b = a >>> a [1, 2, 3] >>> b [1, 2, 3] ...

  3. jQuery之CSS选择器的处理机制

    <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...

  4. appium+python测试app使用相对坐标定位元素

    我们获取到的是绝对坐标,如果换一个屏幕分辨率不同的手机那这个坐标自然会发生变化,要实现不同手机均能实现点击同一控件自然要用到相对坐标了,具体方法如下: 1.获取当前空间的绝对坐标(x1,y1),开启指 ...

  5. 处理json大文件

    import json import pymysql # 读取review数据,并写入数据库 # 导入数据库成功,总共4736897条记录 def prem(db): cursor = db.curs ...

  6. 【第一部分】01Leetcode刷题

    一.二叉树的中序遍历 题目:94. 二叉树的中序遍历.94. Binary Tree Inorder Traversal 解法一: class Solution { public: vector< ...

  7. 如何把网址配置为http和https可以同时访问

    1.打开iis7 ,找到具体站点 2.点击站点后右侧有个绑定按钮 3.点击绑定,增加https,设置端口,ssl选择 iis证书 4.找到ssl设置,要求证书不勾选,客户证书,忽略 5.如果右侧不显示 ...

  8. Typora开启行内公式

    文件→偏好设置→Markdown,勾选内联公式,重启typora 输入$,按Esc键会自动在后面加上一个$,然后在这两个$之间输入公式.

  9. nginx做代理离线下载插件

    一.背景 被安装的服务器不能上网,无法下载插件,一个插件都还好,但是遇到插件依赖很强的需要几十个插件的依赖,这样就很麻烦. 二.环境 192.168.182.155     安装nginx     能 ...

  10. Json常用组件

    Json2.js   开发者:json官网:http://www.json.org/. 适用环境:用于在不支持JSON对象的浏览器(通常是国内使用IE内核的第三方浏览器)下使用.json2.js提供了 ...