LOJ-10105(欧拉回路模板,套圈法,递归)
题目链接:传送门
思路:
(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(欧拉回路模板,套圈法,递归)相关推荐
- UOJ 117 欧拉回路(套圈法+欧拉回路路径输出+骚操作)
题目链接:http://uoj.ac/problem/117 题目大意: 解题思路:先判断度数: 若G为有向图,欧拉回路的点的出度等于入度. 若G为无向图,欧拉回路的点的度数位偶数. 然后判断连通性, ...
- uoj #117. 欧拉回路 套圈法
题面 题意 给出一幅有向或无向图,判断是否存在一个环走遍所有边,若有则输出求其中的环. 做法 首先判断很容易,对于无向图只要联通且度数都是偶数即可,对于有向图,则要联通且入度等于出度,问题在于如何找到 ...
- 【c++/euler】套圈法解有向图的欧拉回路
[参考]Matching_Euler_Tours_and_the_Chinese_Postman [REPRESENTATION]The edge-pairingrepresentation[表示方法 ...
- UVA10054-The Necklace(无向图欧拉回路——套圈算法)
Problem UVA10054-The Necklace Time Limit: 3000 mSec Problem Description Input The input contains T t ...
- 【计算理论与算法分析设计】 4. 套圈 (HDU-1007)
套圈 Description Have you ever played quoit in a playground? Quoit is a game in which flat rings are p ...
- 分治法解决最小套圈问题
/* Copyright by ZhongMing-Bian Jan,6,2010 */ /* 分治法解决最小套圈问题 ...
- 哥尼斯堡的“七桥问题” (25 分)【欧拉回路模板题】
立志用最少的代码做最高效的表达 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Eule ...
- Java反梯形图案_梯形法求定积分(一)设计梯形法求积分的类模板,梯形法
/*设计梯形法求积分的类模板,梯形法求积分的函数被定义为成员函数,可以求任意函数的定积分,用积分类的模板参数T引入被积函数*/ #include #include #include using nam ...
- DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总
DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...
- 力扣 LCP 42. 玩具套圈 (数学公式反推)
题意 场地外,小力组织了一个套玩具的游戏.所有的玩具摆在平地上,toys[i] 以 [xi,yi,ri] 的形式记录了第 i 个玩具的坐标 (xi,yi) 和半径 ri.小扣试玩了一下,他扔了若干个半 ...
最新文章
- Java操作XML文件 dom4j 篇【转】
- 数据预处理(Python scikit-learn)
- 什么是 Web 应用性能评测领域的 RAIL 模型
- 台式机电脑配置单_2020年电脑配置单重点硬件参考
- python label background设置成透明_纯Python绘制满满艺术感的山脊地图
- 前篇|信贷监控报表的设计
- 吴恩达机器学习学习笔记第九章:神经网络学习
- 怎么解决php页面编码问题,PHP页面编码问题
- 改进的EfficientNet-B4用于黑色素瘤检测
- 英特尔“Beach”图片泄露 Optane SSD路线图成关注焦点
- java aes加密 cbc_AES加密,CBC模式,0填充
- ubuntu下cmake安装
- SpringBoot实现导入功能
- android HierachyViewer使用
- LuoguP4234_最小差值生成树_LCT
- 速通C语言支线第一站 基础刷题
- FPGA功耗那些事儿(转载)
- 如何用ChatGPT做新品上市推广方案策划?
- html监控页面大小,JQuery实时监控窗口大小(无需插件)
- 数组的定义与使用(一)
热门文章
- PyQt设置右下角弹窗(转)
- WSJ新闻标题的中心词提取
- 【Matlab学习手记】多元非线性回归
- pandas task-08
- 微信小程序开发(原生)
- 计算机用户文件夹加密,电脑怎么设置加密文件夹_给电脑文件夹设置密码的方法...
- 计算机主机内部配件有哪些,[计算机维护常识]主机内部有哪些附件
- uniapp 权限判断 判断位置,摄像头,相册,通讯录是否开启,如果没有开启弹窗提示并且进入设置打开权限
- 服务器系统开启telnet,Telnet怎么打开 Win7/Win8系统开启Telnet服务方法图解
- 语言模型(Language Modeling)”