一笔画问题

时间限制: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

#include<stdio.h>
#include<string.h>
int pre[10010],dre[10010];
int find(int x)
{
return pre[x]==x?x:find(pre[x]);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
{
pre[i]=i;
dre[i]=0;
}
for(int i=0;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
dre[x]++;//dre记录的相当于是每个点使用的次数
dre[y]++;
int fx=find(x);
int fy=find(y);
if(fx!=fy)
pre[fy]=fx;//并查集将点连在根节点
}
int cnt1,cnt2;
cnt1=cnt2=0;
for(int i=1;i<=n;i++)
{
if(pre[i]==i)
{
cnt1++;
if(cnt1>1)
break;
}
if(dre[i]%2)
++cnt2;
}
if(cnt1>1)//cnt1表示根结点的数目,但是根节点只能有一个
printf("No\n");
else
{
if(cnt2==0||cnt2==2)
//cnt2记录的是使用次数为奇数的点,如果为0,那么这个图就是一个环,
//如果cnt==2那这个图就是一个有起点有终点的图
printf("Yes\n");
else printf("No\n");
}
}
return 0;
}

#include<stdio.h>
#include<string.h>
int G[1010][1010],p[1010],vis[1010];
int m,n;
void dfs(int i)//dfs将所有可以连接到的点全部遍历
{
int v;
vis[i]=1;
for(v=0;v<n;v++)
{
if(v!=i&&G[i][v]&&!vis[v])//i为起点终点不为i并且没有遍历过的边
dfs(v);
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int x,y,flog=1,count=0;
scanf("%d%d",&n,&m);
memset(vis,0,sizeof(vis));
memset(G,0,sizeof(G));
memset(p,0,sizeof(p));
for(int i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
G[x-1][y-1]=G[y-1][x-1]=1;//点的编号都减一便于遍历
++p[x-1];
++p[y-1];
}
dfs(0);
for(int i=0;i<n;i++)
{
if(vis[i]==0)
flog=0;//如果在dfs之后还有一些点没有遍历到
if(p[i]&1)
++count;
}
if(flog)
{
if(count==0||count==2)//起点终点要么是一个要么两个
printf("Yes\n");
else
printf("No\n");
}
else printf("No\n");
}
return 0;
}


nyoj--42--一笔画问题(并查集)的更多相关文章

  1. NYOJ 42 一笔画问题 (并查集+欧拉回路 )

    题目链接 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画.   输入 第一行只有一个正整数 ...

  2. NYOJ 42 一笔画问题

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  3. NYOJ 42 一笔画

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  4. NYOJ 208 Supermarket (模拟+并查集)

    题目链接 描述 A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Pr ...

  5. nyoj 42 一笔画 欧拉通路

    http://acm.nyist.net/JudgeOnline/problem.php?pid=42 一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 zyc ...

  6. nyoj 42 一笔画问题 欧拉路径

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42 欧拉回路,欧拉路径水题~ 代码: #include "stdio.h&quo ...

  7. HDOJ 1878 欧拉回路 nyoj 42一笔画问题

    #include<cstdio> #include<cstring> ]; int find(int x) { if(visited[x]!=x) return find(vi ...

  8. HDU 3926 并查集 图同构简单判断 STL

    给出两个图,问你是不是同构的... 直接通过并查集建图,暴力用SET判断下子节点个数就行了. /** @Date : 2017-09-22 16:13:42 * @FileName: HDU 3926 ...

  9. nyist 42 一笔画 (欧拉回路 + 并查集)

    nyoj42 分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径. 若该路径是一个圈,则称为欧拉(Euler)回路. 具有欧拉回路的图称为欧拉图(简称E图).具有欧拉路 ...

  10. nyoj 42-一笔画问题 (欧拉图 && 并查集)

    42-一笔画问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:25 题目描述: zyc从小就比较喜欢玩一些小游戏,其中就包括画 ...

随机推荐

  1. [using_microsoft_infopath_2010]Chapter2 表单需求,使用表决矩阵

    本章概要 1.从模板创建表单 2.从创建表单收集需求 3.使用全部表单决策 4.决定需要创建哪种表单

  2. Intellij IDEA插件 - Scroll From Source

    Intellij IDEA插件 - Scroll From Source 学习了:http://blog.csdn.net/luonanqin/article/details/41088171 可以自 ...

  3. jQuery中focusin()和focus()、find()和children()的差别

    jQuery中focus()和focusin().focus()和children()的差别 focus()和focusin() focus()和focusin()的差别在于focusin()支持事件 ...

  4. python写个简单的文件上传是有多难,要么那么复杂,要么各种,,,老子来写个简单的

    def upload(url,params): ''' 上传文件到server,不适合大文件 @params url 你懂的 @params {"action":"xxx ...

  5. .net中的目录

    System.Environment.CurrentDirectory Application.StartupPath https://msdn.microsoft.com/en-us/library ...

  6. [jzoj NOIP2018模拟10.29]

    OI生涯的最高分,来了纪中这么多天,在经历了这么多场“NOIP难度”的模拟赛之后,终于看到了真正的NOIP 今天考场上效率很高,很快码完了全部的题目,留下了足够的时间对拍和...发呆.不得不说看着电脑 ...

  7. JavaScript / JQuery事件委托如何实现?

    一:什么是事件委托? 事件委托是利用事件冒泡,只指定一个事件处理程序来管理某一类型的所有事件. 事件委托就是利用事件冒泡原理实现的! 事件冒泡:就是事件从最深节点开始,然后逐步向上传播事件: 例:页面 ...

  8. tml兼容性

    于IE6下,不能识别我们的h5标签,解决办法 主动使用js创建header,footer等标签.--存在的问题,这种方法创建的元素,对于IE6来说,相当于自定义标签,而自定义标签属于 默认属于行内元素 ...

  9. 用js将CheckBox的值存入数据库和将数据库字符串的值转为数组选中CheckBox

    Index @{ ViewBag.Title = "测试"; } <script src="~/Scripts/jquery-1.10.2.js"> ...

  10. js正则学习小计

    //元字符 {} () ^ $ . ? + //预定义字符 \d \D \w \W \s \S //量词 {n,m} {n} {n,} + ? * //贪婪和惰性 //反向引用 //分组 //候选 / ...