正题

题目链接:https://www.luogu.com.cn/problem/AT4518


题目大意

给出\(n\)个点\(m\)条边的一张简单无向联通图,求能否把它分成三个可重复点的环。

\(1\leq n,m\leq 10^5\)


解题思路

相当于你要去掉图上的两个环后依旧有欧拉回路

首先原本肯定得有欧拉回路,考虑怎么去掉这两个环。

如果图上有一个度数不小于\(6\)的点,那么这个点就可以直接拉出三个环。

度数为\(2\)的点只能经过一遍,显然不能分环。

那就只剩下度数为\(4\)的点了,只有一个显然不行,如果有三个或以上的度数为\(4\)的点,那么直接拉出它们之间的路径就有三个环了

有两个的情况比较特殊,其实是一定可以多拉出两个环的,但是如果从某个度数为\(4\)的点出发的所有路径都必须经过另一个点,那么拉出的这两个环会把图变得不连通,所以需要特判一下这种情况。

时间复杂度\(O(n+m)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct node{
int to,next;
}a[N<<1];
int n,m,tot,ans,last,deg[N],ls[N];
bool v[N];
void addl(int x,int y){
a[++tot].to=y;
a[tot].next=ls[x];
ls[x]=tot;return;
}
void dfs(int x){
if(v[x])return;v[x]=1;
for(int i=ls[x];i;i=a[i].next){
int y=a[i].to;
if(deg[y]==4){
ans+=(y==last);
last=y;
}
else dfs(y);
}
return;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
addl(x,y);addl(y,x);
deg[x]++;deg[y]++;
}
int cnt=0,flag=0;
for(int i=1;i<=n;i++)
if(deg[i]&1)return puts("No")&0;
else if(deg[i]>=6)flag=1;
else cnt+=(deg[i]==4);
if(flag||cnt>2)return puts("Yes")&0;
if(cnt<=1)return puts("No")&0;
for(int i=1;i<=n;i++)
if(!v[i]&&deg[i]==2)last=0,dfs(i);
if(ans)puts("Yes");
else puts("No");
return 0;
}

AT4518-[AGC032C]Three Circuits【欧拉回路】的更多相关文章

  1. [Atcoder AGC032C]Three Circuits

    题目大意:有一张$n$个点$m$条边的无向连通图,判断是否可以从中分出$3$个环,满足三个环覆盖整张图并且没有重复的边.$n,m\leqslant10^5$ 题解:分类讨论.有度数为奇肯定不行,因为连 ...

  2. ACM/ICPC 之 混合图的欧拉回路判定-网络流(POJ1637)

    //网络流判定混合图欧拉回路 //通过网络流使得各点的出入度相同则possible,否则impossible //残留网络的权值为可改变方向的次数,即n个双向边则有n次 //Time:157Ms Me ...

  3. [poj2337]求字典序最小欧拉回路

    注意:找出一条欧拉回路,与判定这个图能不能一笔联通...是不同的概念 c++奇怪的编译规则...生不如死啊... string怎么用啊...cincout来救? 可以直接.length()我也是长见识 ...

  4. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

  5. UVA 10054 the necklace 欧拉回路

    有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...

  6. POJ 1637 混合图的欧拉回路判定

    题意:一张混合图,判断是否存在欧拉回路. 分析参考: 混合图(既有有向边又有无向边的图)中欧拉环.欧拉路径的判定需要借助网络流! (1)欧拉环的判定:一开始当然是判断原图的基图是否连通,若不连通则一定 ...

  7. codeforces 723E (欧拉回路)

    Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...

  8. UVa 12118 检查员的难题(dfs+欧拉回路)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. UVA 10054 (欧拉回路) The Necklace

    题目:这里 题意:有一种由彩色珠子连接而成的项链,每个珠子两半由不同颜色(由1到50的数字表示颜色)组成,相邻的两个珠子在接触的地方颜色相同,现在有一些零碎的珠子,确认它是否能 复原成完整的项链. 把 ...

随机推荐

  1. Spring-boot注入配置为java静态属性

    配置文件 注入静态变量 注意 类上面有:@Component注解 使用注入的静态变量 成功

  2. 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

    大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...

  3. 实现动态加载一个 JavaScript 资源

    var script = document.createElement("script"); var head = document.getElementsByTagName(&q ...

  4. ManagementEventWatcher throws ManagementException with call to Stop()

    参考网址:https://stackoverflow.com/questions/46100105/managementeventwatcher-throws-managementexception- ...

  5. final、finally与finalize的区别?

    一.final.finally与finalize的区别 final:final是一个修饰符,可以修饰类,方法和变量.final修饰类表示类不能被其它类继承,并且该类中的所有方法都会隐式的被final修 ...

  6. Springboot使用MatrixVariable 注解

        根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对.规范中没对对应的术语.一般 "URL 路径参数" 可以被应用,尽管更加独特的 &qu ...

  7. Spring详解(八)------常用的连接池配置

    首先,我们准备Jdbc属性文件 jdbc.properties,用于保存连接数据库的信息,利于我们在配置文件中的使用 jdbc.driver=com.mysql.jdbc.Driver jdbc.ur ...

  8. Go: 复合数据类型struct

    结构体 结构体是将零个或多个任意类型的命名变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. type Employee struct { ID int Name string age int ...

  9. OVN架构

    原文地址 OVN架构 1.简介 OVN,即Open Virtual Network,是一个支持虚拟网络抽象的系统. OVN补充了OVS的现有功能,增加了对虚拟网络抽象的原生(native)支持,比如虚 ...

  10. 你不知道的echarts,前端鲍哥带你研究!

    前言 相信不少前端小伙伴刚接触 e-charts 肯定有点陌生,但是echarts咱不清楚,charts我们应该很熟悉,没错,echarts 就是我们日常可见的图表,不同的是 echarts 是用代码 ...