A - 欧拉回路+并查集 HDU - 1878_pqdong的博客-程序员宅基地

技术标签: 欧拉图  图论  数据结构  

A - 欧拉回路+并查集 HDU - 1878

题目连接
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
Sample Input
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
Sample Output
1
0

解题思路
一开始WA了一发伤心(因为没有判断图是否连通,一定特别注意欧拉图是连通图)
1.欧拉图的特点:
2.欧拉路径:从一个节点出发走一次可以经过所有的边,如果是回路则是欧拉回路
3.欧拉回路:
无向图:所有节点度为偶数,图联通(图联通这一点很重要,经常忘,此题就是并查集判断连通性【判断存在几个并查块】)
有向图:所有顶点出度等于入度,图联通
4.欧拉路径:
无向图:图联通,只有两个节点是奇度数,其余的都是偶度数
有向图:图联通,有一个节点出度大入度1,有一个节点入度大出度1,其余节点入度等于出度

#include<iostream>
#include<stdio.h>
#include<memory.h>
#include<stdlib.h>
using namespace std;
int maps[1005];
int father[1005];
int Find(int x){
    int r=x;
    while(father[r]!=r){
        r=father[r];
    }
    int i=x;
    int j;
    while(father[i]!=r){
        j=father[i];
        father[i]=r;
        i=j;
    }
    return r;
}
int main(){
    int n,m,x,y;
    while(~scanf("%d",&n)&&n!=0){
        cin>>m;
        memset(maps,0,sizeof(maps));
        memset(father,0,sizeof(father));
        for(int i=0;i<1005;i++){
            father[i]=i;
        }
        for(int i=0;i<m;i++){
            cin>>x>>y;
            maps[x]++;
            maps[y]++;
            int ax=Find(x);
            int ay=Find(y);
            if(ax!=ay){
                father[ax]=ay;
            }
        }
        int flag=0;
        for(int i=1;i<=n;i++){
            if(maps[i]%2!=0){
                cout<<0<<endl;
                flag=1;
                break;
            }
        }
        int tt=Find(1);
        for(int i=2;i<=n;i++){
            if(tt!=Find(i)){
                if(flag!=1){
                    cout<<0<<endl;
                    flag=1;
                }
                break;
            }
        }
        if(flag==0){
            cout<<1<<endl;
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pqdong/article/details/79656060

智能推荐

OpenErp-程序员宅基地

http://openerp-china.org/index.php?page=Hello+OpenERP OpenERP中文帮助欢迎恭喜你来到 OpenERP 的世界,开始成为您未来 ERP 的主人!准备好开始你的 OpenERP 之旅了么?最新版本|OpenERP v6.1.1-latest| ALL-IN

c语言头文件下载大全,求C语言头文件下载?-程序员宅基地

传统 C++#include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> //定义错误码#include <float.h> //浮点数处理#include <fstream.h> //文件输入/输出#include <iomanip.h> //参..._c语言头文件下载

linux 网卡天启与关闭,在Gnome Shell中切换到黑暗模式(Dark Mode)的方法-程序员宅基地

Gnome Shell具有内置的黑暗主题,允许用户更改桌面,文件管理器和所有与Gnome相关的窗口和应用程序的外观,使其看起来更加适合夜间使用并且易于使用,这个主题不需要安装,已经在Gnome的几个版本中出现。可以通过Gnome Tweak Tool在Gnome Shell中启用黑暗模式(Dark Mode),但是,Tweak工具通常不会预先安装在Linux操作系统上,所以需要安装Gnome Tw..._gnome黑暗主题

计算机基础考试题库(含答案)_基础题库计算机_毛毛475考证的博客-程序员宅基地

大学计算机基础》试题题库及答案一、单选题练习1.完整的计算机系统由( C )组成。A.运算器、控制器、存储器、输入设备和输出设备B.主机和外部设备C.硬件系统和软件系统D.主机箱、显示器、键盘、鼠标、打印机2.以下软件中,( D )不是操作系统软件。A.Windows xp B.unix C.linux   D.microsoft office3.用一个字节最多能编出( D )不同的码。A. 8个 ..._基础题库计算机

linux保存mp4格式的文件,Linux中利用ffmpeg转换手机支持的mp4格式视频文件-程序员宅基地

首先当然是需要安装ffmpeg软件包,可以直接从源中进行安装!但我安装后并不能成功执行后面所需要执行的转换命令,所以我只能重新从源码编译安装ffmpeg:(1)下载ffmpeg源码包,注意版本不能太高,应该与直接从源中安装的版本大抵相当最好;我刚开始下的版本比较高,编译时提示说有一个编译选项找不 到,我到网上也没搜出什么结果,所以只能又降低了版本,最后使用的是ffmpeg-0.4.9-p20050..._linux 相机视频保存mp4

网络嗅探教程:使用Sniffer Pro监控网络流量 2_sniffer流量-程序员宅基地

步骤二:Sniffer Pro 安装、启动、配置Sniffer Pro 安装过程与其它应用软件没有什么太大的区别,在安装过程中需要注意的是:①Sniffer Pro 安装大约占用70M左右的硬盘空间。②安装完毕Sniffer Pro后,会自动在网卡上加载Sniffer Pro 特殊的驱动程序(如图5)。③安装的最后将提示填入相关信息及序列号,正确填写完毕,安装程序需要重新启动计算机。④对于英文不好_sniffer流量

随便推点

springwebflux 页面_Spring WebFlux Web客户端 - 迭代分页REST API_叶梵舒的博客-程序员宅基地

我需要从可分页的REST API的所有页面获取项目 . 我还需要开始处理项目,只要它们可用,不需要等待加载所有页面 . 为了做到这一点,我正在使用Spring WebFlux及其WebClient,并希望返回 Flux . 此外,我使用的REST API是速率限制的,每个响应都包含 Headers ,其中包含当前限制的详细信息:当前窗口的大小当前窗口中的剩余时间在窗口中请求配额请求在当前窗口中保..._spring webflux分页

浅谈安卓UI设计_安卓app页面是什么写的-程序员宅基地

用户界面在程序开发中十分重要,一个好的用户界面设计需要考虑到用户使用体验、是否美观方便等。在界面设计的过程中,需要考虑如何制作出UI界面,怎么样控制UI界面两大块。这里先放上之前我们UI作业的截图:![1](https://img-blog.csdn.net/20180616235118904?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dl..._安卓app页面是什么写的

JQGRID 中的EDITRULES来自定义COLMODEL验证规则-程序员宅基地

editrules editrules是用来设置一些可用于可编辑列的colModel的额外属性的。大多数的时候是用来在提交到服务器之前验证用户的输入合法性的。比如editrules:{edithidden:true, required:true....}。 可选的属性包括: edithidden:只在Form Editing模式下有效,设置为true,就可以让隐藏字段...

android atmel32u4 键盘,Mini 身材 Arduino 机器键盘设计(原理图、主要代码)_核心期刊编辑大唐的博客-程序员宅基地

可能感兴趣的项目设计:机械键盘概述:机械键盘,全键无冲,全背光。Mini身材,高度逼格。同时兼容Arduino硬件和市面上的客制化机械键盘驱动,GH60布局。Arduino带来高度的可玩性,入门难度低,全部按键随心自定义,宏也是信手拈来。更可贵的是带有特色波轮,能进行各种快捷操作,同时特别的背光设计也能使得单独控制每个灯光成为可能。硬件说明在GH60和Arduino Micro的基础上,设计了本作...

webkit 内核浏览器滚动条样式_webkit滚动条样式-程序员宅基地

滚动条的组成: ::-webkit-scrollbar 滚动条整体部分 ::-webkit-scrollbar-thumb 滚动条里面的小方块,能上下左右移动(取决于是垂直滚动条还是水平滚动条) ::-webkit-scrollbar-track 滚动条的轨道(里面装有thumb) ::-webkit-scrollbar-button 滚..._webkit滚动条样式

PDP: A General Neural Framework for Learning Constraint Satisfaction Solvers2020-05-04_pdp: a general neural framework for learningconstr-程序员宅基地

PDP: A General Neural Framework for Learning Constraint Satisfaction SolversAbstractit is not clear how the search strategy in the learned models actually works. So propose a generic neural framework to solve CSP( constraint satisfaction problems) in a f_pdp: a general neural framework for learningconstraint satisfaction solvers

推荐文章

热门文章

相关标签