The Necklace 【UVA - 10054】【欧拉回路详解】

2023-11-19

题目链接1

题目链接2


  题目求的是一串珠子,要让它们首尾相互照应才能串起来,并且,最后要连成一个环,使得最后的珠子的尾与第一个珠子的头相互对应。

  那么,这道题就是道求欧拉回路的题了,我们要先判断这是不是能够构成欧拉回路,这是个无向图,再对于需要首尾链接的欧拉回路,我们所有的节点的度都必须是偶数,如果有节点的度不是偶数,说明就会跳不出这个点,就形成不了欧拉图了。

  再者,对于怎么搜的问题,我们已经知道这是个欧拉图了,我们从任意节点开始进入这幅图,那么既然都能构成欧拉回路,所以我们先记录每条边的出现次数,然后每放进去就删除一条,如果没有下一个点的走法,就把这条边的两个端点输出,但是呢,这里需要倒叙输出,就是先进去的放在后面,例如dfs()中的查询是u->v但是我们输出得是v->u,这里当然是有原因的,我们遇到一个多下一个后继点的点,我们都需要返回到这个点,这么解释好像不大好:譬如有点1->2, 1->3, 1->4,说明从1出去有很多节点,我们不能按照顺叙输出,得逆序,不然最后会出现不一样的衔接。


#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 55;
int N, head[maxN], cnt, edge[maxN][maxN], du[maxN];
struct Eddge
{
    int nex, to;
    Eddge(int a=-1, int b=0):nex(a), to(b) {}
}path[2005];
void addEddge(int u, int v)
{
    path[cnt] = Eddge(head[u], v);
    head[u] = cnt++;
}
void dfs(int u)
{
    for(int i=head[u]; i!=-1; i=path[i].nex)
    {
        int v = path[i].to;
        if(edge[u][v])
        {
            edge[u][v]--;
            edge[v][u]--;
            dfs(v);
            printf("%d %d\n", v, u);
        }
    }
}
void init()
{
    cnt = 0;
    memset(head, -1, sizeof(head));
    memset(edge, 0, sizeof(edge));
    memset(du, 0, sizeof(du));
}
int main()
{
    int T;  scanf("%d", &T);
    for(int Cas=1; Cas<=T; Cas++)
    {
        if(Cas>1) printf("\n");
        scanf("%d", &N);
        init();
        int e1, e2;
        for(int i=1; i<=N; i++)
        {
            scanf("%d%d", &e1, &e2);
            addEddge(e1, e2);
            addEddge(e2, e1);
            edge[e1][e2]++;
            edge[e2][e1]++;
            du[e1]++;
            du[e2]++;
        }
        printf("Case #%d\n", Cas);
        bool flag = true;
        for(int i=1; i<=50; i++)
        {
            if(du[i] & 1)
            {
                flag = false;
                printf("some beads may be lost\n");
                break;
            }
        }
        if(flag)
        {
            for(int i=1; i<=50; i++) dfs(i);
        }
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

The Necklace 【UVA - 10054】【欧拉回路详解】 的相关文章

  • 【C语言】图的邻接表——超详细解析

    图的邻接表 我们重点分析一下无向图 邻接表 我们如何将图中所有顶点和边建立起联系 1 我们发现 V0这个顶点与V1和V3相连 通过右边的邻接表可以看到会出现一个以 V0为头结点的单链表 后面连接的元素就是V1和V3 在顶点数组中的下标 2
  • 图论感想

    图论基础无非也就是图存储 遍历 有向图无向图的连通性 分为图联通和联通分量 有向图为强联通分量 割点与割边 本人目前还没有看网络流内容 只是大致知道是什么 觉得也是图论一部分 个人认为学东西应该大体了解一下所学内容 每学一个必要好好思考 最
  • [STL]vector常见用法详解

    目录 引入 常见用法介绍 1 vector的定义 2 vector容器内元素的访问 3 vector常用函数实例解析 1 push back 2 pop back 3 size 4 clear 5 insert 6 erase vector
  • Road Construction POJ - 3352(tarjan双连通缩点模板)

    题目描述 给一个无向连通图 至少添加几条边使得去掉图中任意一条边不改变图的连通性 即使得它变为边双连通图 include
  • 数据结构 图的应用

    文章目录 生成树 定义 性质 带权图的最小生成树 最小生成树的生成规则 最小生成树 Kruskal算法 步骤 最小生成树 Prim算法 步骤 最短路径 非负权值的单源最短路径 Dijkstra算法 目的 算法 存储空间 算法步骤 算法实现
  • hdu 5756:Boss Bo

    题目链接如下 Problem 5756 先用dfs确定每个节点的序号编号 并且可以获得每个节点可以包括的子树节点区间范围 再用线段树建立一棵树 在第一次建立的时候我们记录每个节点的深度 然后再进行一次dfs 这次dfs用来更新以不同节点为根
  • 图论17(Leetcode864.获取所有钥匙的最短路径)

    用二进制表示获得的钥匙 假设n 钥匙个数 000000000代表没有钥匙 0000000001代表有idx为1的钥匙 0000000011代表有idx 1 2的钥匙 这方法巧妙又复杂 代码 class Solution static int
  • 图的应用--Prim算法

    图的应用 Prim算法 Prim算法是一种基于顶点的贪心算法 从起始顶点出发 每次迭代选择当前可用的最小权值边 然后把边上依附的其他顶点加入最小生成树 prim算法可以称为 加点法 比较适合稠密图 算法思想 设G V E 是一个加权连通图
  • 22年菲尔兹奖获得者HUGO DUMINIL-COPIN 研究内容总结

    雨果 迪米尼 科潘获得 2022 的菲尔兹数学奖 因解决了统计物理中相变 概率理论的长期问题 特别是三维和四维问题以及二维中的不可积情况 下 雨果最显著的成果是三维和四维 Ising 模型 他与合作者解决了 80 年代以来一直存在的问题 建
  • 2021级新生个人训练赛第38场

    问题 A chicken 题目描述 小 x 非常喜欢小鸡翅 他得知 NSC 超市为了吸引顾客 举行了如下的活动 一旦有顾客在其他超市找到更便宜的小鸡翅 NSC 超市将免费送给顾客 1000g 小鸡翅 小 x 为了尽可能的省钱 走遍了各大超市
  • 学懂最小生成树(克鲁斯卡尔算法)

    本节 小编将带大家了解最小生成树的第二种构成算法 克鲁斯卡尔算法 Kruskal algorithm 当然 对另一种算法感兴趣的朋友可以看看之前的这篇文章 学懂最小生成树 普里姆算法 目录 一 实现原理 二 代码实现 一 实现原理 克鲁斯卡
  • The Stable Marriage Problem 【HDU - 1914】【稳定婚姻匹配问题】

    题目链接 Problem Description The stable marriage problem consists of matching members of two different sets according to the
  • 矩阵树定理

    启蒙 http zhengruioi com contest 1416 T1 T2的10分暴力 后面是论文科技 不搞了 https www luogu com cn problem P6178 O n 3
  • 1600*D. Road Map(数学

    解析 记录每个点的父节点和子节点 从新的根节点开始遍历 遍历所有的非父结点即可 include
  • Codeforces Round #751 (Div. 2) D. Frog Traveler(BFS)

    题解 因为我们最多把所有的点跳一遍么 所以直接BFS模拟一下就行了 注意现在跳的点不能是以前已经跳过的点 并且只能越跳越高 否则没有意义 这样就保证了时间复杂度是线性的 AC代码 include
  • How far away ? 【HDU - 2586】【DFS+链式前向星优化】

    题目链接 其实这道题可以不用链式前向星优化换做vector lt gt 也是可以跑的 只是会许会慢些而已 来换个中文题意好读些 勇气小镇是一个有着n个房屋的小镇 为什么把它叫做勇气小镇呢 这个故事就要从勇气小镇成立的那天说起了 修建小镇的时
  • 1345:香甜的黄油(Dijkstra)---信息学奥赛一本通

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法 糖 把糖放在一片牧场上 他知道N 1 N 500 只奶牛会过来舔它 这样就能做出能卖好价钱的超甜黄油 当然 他将付出额外的费用在奶牛上 农夫John很狡猾 像以前的巴甫洛夫 他知道
  • 714阿里巴巴模拟面试

    介绍一下数据库分页 https www nowcoder com questionTerminal 3577280c810546658f06f19c01ff0345 给定一棵树 求出这棵树的直径 即两个节点距离的最大值 应该是左右子树遍历深
  • 数据结构算法—邻接表存储的无向图求连通分量个数

    数据结构算法 邻接表存储的无向图求连通分量个数 邻接表存储结构 typedef struct ArcNode int adjvex 边指向的顶点 struct ArcNode nextarc 下一条边的指针 ArcNode typedef
  • 讲解 最大流问题+最小花费问题+python(ortool库)实现

    文章目录 基本概念 图 邻接矩阵 最大流问题 python解决最大流问题 python解决最大流最小费用问题 喜欢的话请关注我们的微信公众号 你好世界炼丹师 公众号主要讲统计学 数据科学 机器学习 深度学习 以及一些参加Kaggle竞赛的经

随机推荐

  • TikTok已达万粉,开通基金仍失败?--TK领航社TIKTOK运营变现最新干货分享

    播神定期分享TikTok运营技巧 教你从零快速掌握TikTok运营和商业变现 今天与大家探讨下 TikTok已达万粉 创作者基金依旧开通失败 是为什么 TK领航社 国内最大TIKTOK社群 运营变现圈子 TikTok 创作者基金是为回馈优质
  • 如何简单快速的探测民用无人机?

    前言 最近俄乌冲突搞得火热 其中以DJI 无人机为代表的民用无人机表现尤为引人注意 这不禁让人思考 在此类无人机战争中步兵班应如何有效快速的感知民用无人机的存在 提高生存能力 一 民用无人机在冲突中的优势 从目前能搜集到的信息来看有以下几个
  • 软件测试-金融银行项目怎么测?系统业务测试总结分析...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 计算机的保护模式与实模式

    一 背景 80386开始 CPU有三种工作方式 实模式 保护模式和虚拟8086模式 只有在刚刚启动的时候是real mode 等到操作系统运行起来以后就切换到protected mode 实模式只能访问地址在1M以下的内存称为常规内存 我们
  • java ssm常遇见的问题_ssm增删改查出现的问题总结

    1 org springframework beans factory BeanCreationException Error creating bean with name org mybatis spring mapper Mapper
  • python 多进程进行文件处理(一)

    在文件处理的时候 经常会遇见大文件数据 单进程处理速度太慢 可以通过多进程来提升效率 应用场景一 同时并行处理多个小文件 处理完成后 写回多个文件 def read wiki data infile outfile param1 单个文件的
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • springboot连接多个redis

    文章目录 前言 方法 yml配置文件 使用 原生说明 总结 前言 我想不到 就这个问题还折腾了好一会儿 方法 yml配置文件 spring application name multiredis redis onedb host 192 1
  • 编程课程与数学的关系

    教学是人类的高级思维活动 越深入 需要的各种思维能力就越多 当思维能力不足 和别人的距离就拉开了 格物斯坦小坦克知道编程课程和数学的关系是密不可分的 小学三年级以前 数学只需要记忆力就可以了 记住一些计算规则 获得90分很容易 家长往往以成
  • Springboot启动后执行方法

    文章目录 一 注解 PostConstruct 二 CommandLineRunner接口 三 实现ApplicationRunner接口 四 实现ApplicationListener 五 四种方式的执行顺序 一 注解 PostConst
  • 8个超实用的Python库合集,推一次火一次!

    Python 是一个很棒的语言 它是世界上发展最快的编程语言之一 它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性 整个 Python 及其库的生态系统使它成为全世界用户 初学者和高级用户 的合适选择 它的成功和流行的原
  • getopts命令详解

    http blog sina com cn s blog 616b428f01019z5l html http blog csdn net wesleyluo article details 5279875 写程序的时候经常要处理命令行参数
  • 程序员办公桌都如此霸气,网友:砖头当杯垫也是不敢惹!

    程序员初入职场 办公桌上可能就一台电脑 一个键盘 一个鼠标 还有就是一个水杯 然而对于老程序员们来说 他们的办公桌肯定会有一大波能符合他们气质的 神器 今天小编就来带大家看看这些 总听人说不会写bug的程序员一定不是个好的产品经理 程序员们
  • 如何在git已有项目中创建空分支

    一 背景 在git中创建一个新的分支都需要指定一个父节点 即必须基于已有的分支创建新的分支 项目已经开发 维护了一段时间如果master分支不是主分支的话 但创建一个新的空分支在实际的项目中又是一种常见需求 比如 项目的某个分支已经演化的比
  • 弱网测试

    首先我们要清楚什么是弱网呢 举一个例子 我们在一个封闭环境中 有时候APP打开的特别慢 或者是一直加载不出来我们想要看到的信息 也就是说这个时候的网速特别的慢 这种状态呢 我们可以理解为弱网 弱网直接造成的影响有丢包 数据无法加载 消息更新
  • Js中async/await的执行顺序详解

    前言 虽然大家知道async await 但是很多人对这个方法中内部怎么执行的还不是很了解 本文是我看了一遍技术博客理解 JavaScript 的 async await 如果对async await不熟悉可以先看下这篇文章 后拓展了一下
  • Tomcat调优常见参数配置

    Tomcat 是一个流行的 Web 应用服务器 以下是一些常见的 Tomcat 配置参数 1 端口配置 HTTP 端口 tomcat 默认使用 8080 端口 可以通过修改 server xml 文件中的 Connector 配置来更改端口
  • QT学习OpenGL序列: Texture

    学习OpenGL文理 1 头文件 ifndef COPENGLWIDGETHELLOTEXTURES H define COPENGLWIDGETHELLOTEXTURES H 控件名称 Hello Textures 注意 STD C Ve
  • Vim中多行删除

    在操作虚拟机的时候 都会出错 当在vim中出现问题的时候 可以在dw普通模式下删除对应的单词 如果在vim中使用多行删除 可以使用dd vim 命令 将行数添加到该命令中 如10dd将从光标底部删除10行 包含光标行在内 删除单行 1 按
  • The Necklace 【UVA - 10054】【欧拉回路详解】

    题目链接1 题目链接2 题目求的是一串珠子 要让它们首尾相互照应才能串起来 并且 最后要连成一个环 使得最后的珠子的尾与第一个珠子的头相互对应 那么 这道题就是道求欧拉回路的题了 我们要先判断这是不是能够构成欧拉回路 这是个无向图 再对于需