nyoj42

分析:

若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。

若该路径是一个圈,则称为欧拉(Euler)回路。 具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉路径但不具有欧拉回路的图称为半欧拉图。

先说一下欧拉路径、欧拉回路的充要条件:

1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数);

2.无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点;

3.有向连通图D是欧拉图,当且仅当该图为连通图且D中每个结点的入度=出度

4.有向连通图D含有欧拉通路,当且仅当该图为连通图且D中除两个结点外,其余每个结点的入度=出度,且此两点满足deg-(u)-deg+(v)=±1。(起始点s的入度=出度-1,结束点t的出度=入度-1 或两个点的入度=出度)

5.一个非平凡连通图是欧拉图当且仅当它的每条边属于奇数个环。

而我们这道题一笔画, 正是要经过图中的每条边一次。 也就是说我们判断一下所个图是否存在欧拉路径就可以啦。

首先求图是否连通(判断连通我们用并查集就好啦, 简单、易懂),

再判断图是否存在欧拉路径(所有点度数为偶数或者只有两个点度数为奇数,其它均为偶数)。

还有注意输出的是 Yes / No

#include<iostream>
#include<cstdio>
#include<string.h>
#include<cstring>
#include<vector>
using namespace std; int t, n, m, sum, pre[], du[], v[][];
int find(int x)
{
int i, j, r;
i = x; r = x;
while(r != pre[r])
r = pre[r];
while(pre[i] != r)
{
j = pre[i];
pre[i] = r;
i = j;
}
return pre[x];
}
int main()
{
cin >> t;
while(t--)
{
scanf("%d%d", &n, &m);
memset(v, , sizeof(v));
memset(du, , sizeof(du));
for(int i = ; i <= n; i++) pre[i] = i;
for(int i = ; i <= m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
int fx = find(x);
int fy = find(y);
if(fx != fy)
pre[fx] = fy;
if(v[x][y] == )
{
v[x][y] = ;
v[y][x] = ;
du[x]++;//记录度数
du[y]++;
}
}
int ans = find();
int flag = ;
for(int i = ; i <= n; i++)// 判断是否是连通图
{
int fx = find(i);
if(fx != ans)
{
flag = ;
break;
}
}
sum = ;
if(flag == )
{
for(int i = ; i <= n; i++)// 若是连通图, 再判断节点度数为奇数共有几个
{
if(du[i] % == )
sum++;
}
if(sum == || sum == )
printf("Yes\n");
else
printf("No\n");
}
else
printf("No\n");
}
return ;
}

nyist 42 一笔画 (欧拉回路 + 并查集)的更多相关文章

  1. POJ2513——Colored Sticks(Trie树+欧拉回路+并查集)

    Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...

  2. POJ 2513 Colored Sticks (欧拉回路+并查集+字典树)

    题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...

  3. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

  4. HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)

    题目链接 题意 : 有很多门,每个门上有很多磁盘,每个盘上一个单词,必须重新排列磁盘使得每个单词的第一个字母与前一个单词的最后一个字母相同.给你一组单词问能不能排成上述形式. 思路 :把每个单词看成有 ...

  5. UVA - 10129 Play on Words(欧拉回路+并查集)

    2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...

  6. poj 1386 Play on Words门上的单词【欧拉回路&&并查集】

    题目链接:http://poj.org/problem?id=1386 题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词就可以相连,判断给出的n个单词是否能够一个接着一个全 ...

  7. LOJ-10108(欧拉回路+并查集)一个图至少用几笔画成

    题目链接:传送门 思路: 用并查集统计出每个区块奇数个节点的个数x,每个区块对笔画的贡献是max(x/2,1): 然后每个区块求和即可. #include<iostream> #inclu ...

  8. PAT甲题题解-1126. Eulerian Path (25)-欧拉回路+并查集判断图的连通性

    题目已经告诉如何判断欧拉回路了,剩下的有一点要注意,可能图本身并不连通. 所以这里用并查集来判断图的联通性. #include <iostream> #include <cstdio ...

  9. hdu 1116 欧拉回路+并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=1116 给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思.但是如果有多个重复的单词时,也必须满足这 ...

随机推荐

  1. HDU4862-Jump(最大流量最大费用流)

    题意:有n*m的格子,每一个格子包含一个数字,0-9.你初始的能量为0,你可以玩k次,每一个你可以选择你现在的格子的正下方或者正右方的任意一个格子跳,但必须是之前没有跳过的格子.每玩一次你都可以跳任意 ...

  2. 楔子(xiē zǐ)

    戏曲.小说的引子.一般放在篇首,用以点明.补充正文,或者说引出正文或是为正文做铺垫.指旧小说的引子,通常放在小说故事开始之前,起引出或补充正文的作用.这不过是个楔子,下面还有正文.——<儒林外史 ...

  3. Python Django manage.py提供的命令及用法

    λpython manage.pyType'manage.py help <subcommand>'for help on a specific subcommand. Available ...

  4. R 语言画图的基本参数

    R 语言画图的基本参数 点 点的种类 点的种类参数为 pch,每一种符号对应一个数字编号 # 点有25种,为了展示25种点 x = 1:25 y = 1:25 x ## [1] 1 2 3 4 5 6 ...

  5. 正确导入svn拉取的工程

    为什么要写这篇博文?主要是记录摸着石头过黄河的过程.之前在eclipse装了svn插件,拉取远程工程,在eclipse显示的工程,并不会分开显示模块工程,反而 是以总工程的姿态呈现.或许你觉得不管分模 ...

  6. 使用Knoctout.分页

    要点:点击标签翻页部分时,pageValue自动加1. 1.api中的方法 public ArticleListModel Get(int page,string _class) { var list ...

  7. setsockopt()使用方法(參数具体说明)

    int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套接字): 指向一个打开的套接口描写叙述 ...

  8. Hdu 5444 Elven Postman dfs

    Elven Postman Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  9. POJ 3104 Drying 二分

    http://poj.org/problem?id=3104 题目大意: 有n件衣服,每件有ai的水,自然风干每分钟少1,而烘干每分钟少k.求所有弄干的最短时间. 思路: 注意烘干时候没有自然风干. ...

  10. php实用函数整理

    1. 排序:array_multisort 可以对多位数组的多个字段进行排序 例子1如下: //自定义数组排序--按转发数从高到低排序 function sortSelfRc($oneLayer){ ...