`
Simone_chou
  • 浏览: 192519 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

一笔画问题(欧拉回路 + 并查集)

    博客分类:
  • NYOJ
 
阅读更多

一笔画问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
 
描述

zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。

规定,所有的边都只能画一次,不能重复画。

 

 
输入
第一行只有一个正整数N(N<=10)表示测试数据的组数。
每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
输出
如果存在符合条件的连线,则输出"Yes",
如果不存在符合条件的连线,输出"No"。
样例输入
2
4 3
1 2
1 3
1 4
4 5
1 2
2 3
1 3
1 4
3 4
样例输出
No
Yes

 

     思路:

     满足欧拉回路或者通路性质即可,这连通图基础上,存在 0 个或者 2 个奇数度结点即可。所以还要判断是不是连通图,用并查集。

 

      AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int v, e;
int root[1005], ans[1005];

void init () {
    for (int i = 1; i <= v; ++i) {
        root[i] = i;
        ans[i] = 0;
    }
}

int Find (int x) {
    return x == root[x] ? x : root[x] = Find(root[x]);
}

int main() {

    int t;
    scanf("%d", &t);

    while (t--) {

        scanf("%d%d", &v, &e);

        init();

        while (e--) {
            int a, b, A, B;
            scanf("%d%d", &a, &b);
            ++ans[a];
            ++ans[b];
            A = Find(a);
            B = Find(b);
            root[A] = B;
        }

        int num = 0;
        for (int i = 1; i <= v; ++i) {
            if (root[i] == i) ++num;
        }

        if (num > 1) printf("No\n");
        else {
            num = 0;
            for (int i = 1; i <= v; ++i) {
                if (ans[i] % 2) ++num;
            }
            if (num == 2 || !num) printf("Yes\n");
            else printf("No\n");
        }
    }

    return 0;
}

 

 

分享到:
评论

相关推荐

    欧拉回路和一笔画问题

    信息学竞赛系列教程,欧拉回路和欧拉路径的基本性质,一笔画问题的两种不同解法。

    欧拉回路题集

    - **题目描述**:构建特定类型的图——德布鲁因图,并找出其欧拉回路。 - **解题思路**:构建德布鲁因图后,判断其是否存在欧拉回路。 - **数据结构**:邻接表。 5. **【HDU】1956 Sightseeing tour 混合欧拉** ...

    欧拉通路回路和一笔画问题1

    欧拉通路回路和一笔画问题 欧拉通路回路是图论中的一种特殊类型的路径,它是指从图中...本文讨论了欧拉通路回路和一笔画问题,介绍了 Hierholzer 算法和 DFS 算法,并应用于解决 LeetCode 332 和 LeetCode 753 问题。

    实验4-图的生成及欧拉回路的确定1

    欧拉回路则以有向图的形式展示,箭头上标注数字,以指示一笔画的路径。 3. **欧拉路径的确定** - **深度优先搜索(DFS)**:采用递归的深度优先搜索策略来寻找欧拉路径。在递归过程中,使用一个大小为图边数+1的...

    基于Qt的一笔画小软件(欧拉回路算法的演示)

    这是一款基于QT实现的一笔画软件,该项目的背景起源于中国邮递员问题,本程序用来模拟邮递员选择最短路径送完所有快递再回到出发点。具体来说,用户可以通过的工具栏在画板区域进行画点并连线,最后形成的图如果能够...

    一笔画问题的c++实现

    "一笔画问题"是图论中的经典问题,指的是在给定的图形中,从某一点出发,沿着边不间断地走过所有边,最后回到起点,并且每条边恰好被走过一次。这种问题通常可以用DFS(深度优先搜索)或BFS(广度优先搜索)算法来...

    二年级奥数.几何.一笔画问题.docx

    一笔画问题是二年级奥数中涉及几何概念的有趣题目,主要考察学生的逻辑推理能力和空间想象力。一笔画是指在不离开纸面且不重复路径的情况下,用一笔完成的图形绘制。理解一笔画的关键在于识别图形中的“奇点”和“偶...

    一笔画问题

    一笔画问题,也被称为欧拉路径问题,是图论中的一个经典问题。它源自于一个简单的游戏:在一张没有交叉的图上,尝试用一支笔不间断地画出所有边,且仅通过每个顶点一次。如果这样的路径存在,我们就说这个图是一笔画...

    java 一笔画问题

    在Java编程领域,"一笔画"问题是一个经典的图论与算法设计问题,它源自于一种叫做"一笔连通图"的数学概念。一笔画游戏通常指的是玩家需要在给定的图形上只用一笔画出所有线条,且不允许线段重复交叉。在编程实现中,...

    二年级奥数.几何.一笔画问题.doc

    - 使用图论中的方法,如欧拉路径(Eulerian Path)和欧拉回路(Eulerian Circuit),可以帮助解决这类问题。 5. **例题分析**: - 例如,题目中的图形可以通过观察奇点和偶点的数量来判断是否能一笔画。例如,...

    四年级奥数第一讲一笔画问题.doc

    四年级奥数第一讲一笔画问题.doc

    2.4图论的一些简单的应用引言生活中许多实际的问题往往都要用到图.docx

    本文将探讨图论的简单应用,特别是通过"一笔画"问题来引出欧拉道路和欧拉回路的概念。 一笔画问题源于18世纪的哥尼斯堡七桥问题,该问题询问是否可能一次走过七座桥,每座桥只经过一次并回到起点。这个问题可以转化...

    一笔画问题——七桥问题的解决.docx

    一笔画问题是图论中的经典问题,源于18世纪的七桥问题。七桥问题是数学史上的一个重要案例,它涉及到如何在一个图中不重复地走过所有边。这个问题最终由瑞士数学家欧拉解决,他提出了数学模型方法,即将实际问题转化...

    数据结构euler一笔画问题

    对于给定的N个点和连接这些点的M条边,编程计算一笔画回路

    课程设计欧拉通路算法

    在数据结构的课程设计中,"连通图一笔画的判定与求解"是一个有趣的课题,它涉及到图论中的欧拉路径和欧拉回路概念。欧拉路径是指在一个无向图中,从一个顶点出发可以经过每条边恰好一次并回到出发点的路径;如果起点...

    一笔画问题,图通路判断

    判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。 输入 第一行只有一个正整数N(N)表示测试数据的组数。 每组测试数据的第一行有两个正整数P,Q(P,Q),分别表示这个画中有多少个顶点...

    二年级奥林匹克数学 一笔画问题习题 试题.doc

    奥林匹克数学一笔画问题习题知识点总结 一笔画问题是奥林匹克数学中的一种经典问题类型,它对学生的逻辑思维、空间想象和分析能力提出了很高的要求。下面是奥林匹克数学一笔画问题习题的知识点总结: 1. 图形的...

    解题思路19

    无向图和有向图的欧拉通路和欧拉回路的定义被阐述,并给出了相关的定理和推论,这些是判断图是否可以一笔画的关键。 定理2.1指出,无向图存在欧拉通路的条件是图是连通的,并且只有两个奇度结点或没有奇度结点。...

Global site tag (gtag.js) - Google Analytics