题目链接:传送门

思路:

(1)用邻接表存储有向图和无向图,有向图和无向图的每条边均站两个单元,无向图有正向边和反向边的区分。

(2)有向图有欧拉回路:所有点的入度=出度;

无向图有欧拉回路:所有点的度数之和是2的倍数。

(3)搜索时要从存在的点开始搜索,注意每条边站两个单位,所以i/2。

(4)搜索的结果路径必须包含所有边,如果图不连通则不行。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn = 200200;
struct Node{int to,next,val;
}edge[maxn*2];
int vis[maxn],head[maxn],IN[maxn],OUT[maxn],tot;
vector <int> ans;
void Init()
{memset(vis,0,sizeof(vis));memset(head,0,sizeof(head));memset(IN,0,sizeof(IN));memset(OUT,0,sizeof(OUT));tot=2;ans.clear();
}
void addedge(int u,int v,int w)
{edge[tot].to=v;edge[tot].next=head[u];edge[tot].val=w;head[u]=tot++;
}
void dfs(int u)
{for(int &i=head[u];i;i=edge[i].next){ //对i引用,提高速度 Node tmp=edge[i];if(!vis[i>>1]){vis[i>>1]=1;dfs(tmp.to);ans.push_back(tmp.val);}}
}
int main(void)
{int n,m,i,j,x,y,type,fg=1;scanf("%d%d%d",&type,&n,&m);Init();for(i=1;i<=m;i++){scanf("%d%d",&x,&y);addedge(x,y,i);IN[y]++;OUT[x]++;if(type==1) addedge(y,x,-i);else tot++;}if(type==1){  for(i=1;i<=n;i++)if((IN[i]+OUT[i])%2){fg=0;break;}}else{for(i=1;i<=n;i++)if(IN[i]!=OUT[i]){fg=0;break;} }if(fg){for(i=1;i<=n;i++) //找到图中存在的点 if(head[i]){dfs(i);break;}if(ans.size()!=m) printf("NO\n");else{printf("YES\n");for(i=m-1;i>=0;i--){if(i!=m-1) printf(" ");printf("%d",ans[i]); //ans相当于栈,所以倒叙输出
            }}}else printf("NO\n");return 0;
}

View Code

参考文章:传送门

转载于:https://www.cnblogs.com/2018zxy/p/10362035.html

LOJ-10105(欧拉回路模板,套圈法,递归)相关推荐

  1. UOJ 117 欧拉回路(套圈法+欧拉回路路径输出+骚操作)

    题目链接:http://uoj.ac/problem/117 题目大意: 解题思路:先判断度数: 若G为有向图,欧拉回路的点的出度等于入度. 若G为无向图,欧拉回路的点的度数位偶数. 然后判断连通性, ...

  2. uoj #117. 欧拉回路 套圈法

    题面 题意 给出一幅有向或无向图,判断是否存在一个环走遍所有边,若有则输出求其中的环. 做法 首先判断很容易,对于无向图只要联通且度数都是偶数即可,对于有向图,则要联通且入度等于出度,问题在于如何找到 ...

  3. 【c++/euler】套圈法解有向图的欧拉回路

    [参考]Matching_Euler_Tours_and_the_Chinese_Postman [REPRESENTATION]The edge-pairingrepresentation[表示方法 ...

  4. UVA10054-The Necklace(无向图欧拉回路——套圈算法)

    Problem UVA10054-The Necklace Time Limit: 3000 mSec Problem Description Input The input contains T t ...

  5. 【计算理论与算法分析设计】 4. 套圈 (HDU-1007)

    套圈 Description Have you ever played quoit in a playground? Quoit is a game in which flat rings are p ...

  6. 分治法解决最小套圈问题

    /*     Copyright    by ZhongMing-Bian     Jan,6,2010   */ /*             分治法解决最小套圈问题                 ...

  7. 哥尼斯堡的“七桥问题” (25 分)【欧拉回路模板题】

    立志用最少的代码做最高效的表达 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Eule ...

  8. Java反梯形图案_梯形法求定积分(一)设计梯形法求积分的类模板,梯形法

    /*设计梯形法求积分的类模板,梯形法求积分的函数被定义为成员函数,可以求任意函数的定积分,用积分类的模板参数T引入被积函数*/ #include #include #include using nam ...

  9. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

  10. 力扣 LCP 42. 玩具套圈 (数学公式反推)

    题意 场地外,小力组织了一个套玩具的游戏.所有的玩具摆在平地上,toys[i] 以 [xi,yi,ri] 的形式记录了第 i 个玩具的坐标 (xi,yi) 和半径 ri.小扣试玩了一下,他扔了若干个半 ...

最新文章

  1. Java操作XML文件 dom4j 篇【转】
  2. 数据预处理(Python scikit-learn)
  3. 什么是 Web 应用性能评测领域的 RAIL 模型
  4. 台式机电脑配置单_2020年电脑配置单重点硬件参考
  5. python label background设置成透明_纯Python绘制满满艺术感的山脊地图
  6. 前篇|信贷监控报表的设计
  7. 吴恩达机器学习学习笔记第九章:神经网络学习
  8. 怎么解决php页面编码问题,PHP页面编码问题
  9. 改进的EfficientNet-B4用于黑色素瘤检测
  10. 英特尔“Beach”图片泄露 Optane SSD路线图成关注焦点
  11. java aes加密 cbc_AES加密,CBC模式,0填充
  12. ubuntu下cmake安装
  13. SpringBoot实现导入功能
  14. android HierachyViewer使用
  15. LuoguP4234_最小差值生成树_LCT
  16. 速通C语言支线第一站 基础刷题
  17. FPGA功耗那些事儿(转载)
  18. 如何用ChatGPT做新品上市推广方案策划?
  19. html监控页面大小,JQuery实时监控窗口大小(无需插件)
  20. 数组的定义与使用(一)

热门文章

  1. PyQt设置右下角弹窗(转)
  2. WSJ新闻标题的中心词提取
  3. 【Matlab学习手记】多元非线性回归
  4. pandas task-08
  5. 微信小程序开发(原生)
  6. 计算机用户文件夹加密,电脑怎么设置加密文件夹_给电脑文件夹设置密码的方法...
  7. 计算机主机内部配件有哪些,[计算机维护常识]主机内部有哪些附件
  8. uniapp 权限判断 判断位置,摄像头,相册,通讯录是否开启,如果没有开启弹窗提示并且进入设置打开权限
  9. 服务器系统开启telnet,Telnet怎么打开 Win7/Win8系统开启Telnet服务方法图解
  10. 语言模型(Language Modeling)”