UVa 10054 The Necklace(无向图欧拉回路)
My little sister had a beautiful necklace made of colorful beads. Two successive beads in the necklace shared a common color at their meeting point. The figure below shows a segment of the necklace:
But, alas! One day, the necklace was torn and the beads were all scattered over the floor. My sister did her best to recollect all the beads from the floor, but she is not sure whether she was able to collect all of them. Now, she has come to me for help. She wants to know whether it is possible to make a necklace using all the beads she has in the same way her original necklace was made and if so in which order the bids must be put.
Please help me write a program to solve the problem.
Input
The input contains T test cases. The first line of the input contains the integer T.
The first line of each test case contains an integer N ( 5 <= N <= 1000) giving the number of beads my sister was able to collect. Each of the next N lines contains two integers describing the colors of a bead. Colors are represented by integers ranging from 1 to 50.
Output
For each test case in the input first output the test case number as shown in the sample output. Then if you apprehend that some beads may be lost just print the sentence ``some beads may be lost" on a line by itself. Otherwise, print N lines with a single bead description on each line. Each bead description consists of two integers giving the colors of its two ends. For 1 <= i <= N1 , the second integer on line i must be the same as the first integer on line i + 1. Additionally, the second integer on line N must be equal to the first integer on line 1. Since there are many solutions, any one of them is acceptable.
Print a blank line between two successive test cases.
Sample Input
2
5
1 2
2 3
3 4
4 5
5 6
5
2 1
2 2
3 4
3 1
2 4
Sample Output
Case #1
some beads may be lost
Case #2
2 1
1 3
3 4
4 2
2 2
题意
给你n串珠子的颜色(两边),问是否能连成一个环
题解
1.把每串珠子想成两个相互连接点,变成无向图
2.并查集判断是否符合无向图欧拉回路的条件:每个点的度数都为偶数
3.这里注意DFS的时候要逆序输出(DFS结束的条件是节点没有可走的边,回溯,回溯的时候若遇到节点还有可走的边,再去递归那条边,使得所有边都被访问过)
代码
#include<bits/stdc++.h>
using namespace std;
int Map[][],Du[],F[];
int Find(int x)
{
return F[x]==x?x:F[x]=Find(F[x]);
}
void dfs(int u)
{
for(int v=;v<=;v++)
if(Map[u][v]>)//可以走的边
{
Map[u][v]--;//边删掉
Map[v][u]--;
dfs(v);
printf("%d %d\n",v,u);//逆序输出
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,t,u,v;
scanf("%d",&t);
for(int k=;k<=t;k++)
{
if(k!=)printf("\n");
printf("Case #%d\n",k);
scanf("%d",&n);
memset(Du,,sizeof(Du));
memset(Map,,sizeof(Map));
for(int i=;i<=;i++)
F[i]=i;
for(int i=;i<=n;i++)
{
scanf("%d%d",&u,&v);
Du[u]++;Du[v]++;//度数
Map[u][v]++;Map[v][u]++;//边
int fu=Find(u);
int fv=Find(v);
if(fu!=fv)
F[fu]=fv;
}
int flag=;
for(int i=;i<=;i++)
{
if(Du[i]==)continue;
if(Du[i]%==||Find(i)!=Find(u))
{
flag=;break;
}
}
if(flag)dfs(u);
else printf("some beads may be lost\n"); }
return ;
}
UVa 10054 The Necklace(无向图欧拉回路)的更多相关文章
- UVA 10054 The Necklace (无向图的欧拉回路)
本文链接:http://www.cnblogs.com/Ash-ly/p/5405904.html 题意: 妹妹有一条项链,这条项链由许多珠子串在一起组成,珠子是彩色的,两个连续的珠子的交汇点颜色相同 ...
- UVA 10054 The Necklace(欧拉回路,打印路径)
题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- uva 10054 The Necklace(欧拉回路)
The Necklace My little sister had a beautiful necklace made of colorful beads. Two successive beads ...
- UVa 10054 The Necklace【欧拉回路】
题意:给出n个珠子,珠子颜色分为两半,分别用1到50之间的数字表示, 现在给出n个珠子分别的颜色,问是否能够串成一个环.即为首尾相连,成为一个回路 判断是否构成一个环,即判断是否为欧拉回路,只需要判断 ...
- UVa 10054 : The Necklace 【欧拉回路】
题目链接 题目大意:我的妹妹有一串由各种颜色组成的项链. 项链中两个连续珠子的接头处共享同一个颜色. 如上图, 第一个珠子是green+red, 那么接这个珠子的必须以red开头,如图的red+whi ...
- uva 10054 The Necklace 拼项链 欧拉回路基础应用
昨天做了道水题,今天这题是比较水的应用. 给出n个项链的珠子,珠子的两端有两种颜色,项链上相邻的珠子要颜色匹配,判断能不能拼凑成一天项链. 是挺水的,但是一开始我把整个项链看成一个点,然后用dfs去找 ...
- UVA 10054 the necklace 欧拉回路
有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...
- UVa 10054 The Necklace BFS+建模欧拉回路
算法指南 主要就是建立欧拉回路 #include <stdio.h> #include <string.h> #include <iostream> #includ ...
- 【欧拉回路】UVA - 10054 The Necklace
题目大意: 一个环被切割成了n个小块,每个小块有头尾两个关键字,表示颜色. 目标是判断给出的n个小块能否重构成环,能则输出一种可行解(按重构次序输出n个色块的头尾颜色).反之输出“some beads ...
随机推荐
- 深度学习原理与框架-卷积神经网络-cifar10分类(图片分类代码) 1.数据读入 2.模型构建 3.模型参数训练
卷积神经网络:下面要说的这个网络,由下面三层所组成 卷积网络:卷积层 + 激活层relu+ 池化层max_pool组成 神经网络:线性变化 + 激活层relu 神经网络: 线性变化(获得得分值) 代码 ...
- 使用ansible安装docker以及docker-compose
转自:https://www.cnblogs.com/jsonhc/p/7879028.html 环境三台centos7主机: master:192.168.101.14,node1:192.168. ...
- Centos 下安装VIM编辑器
我们在安装完Centos后,它默认的是安装了VI编辑器,VIM是没有安装的,所以我们在使用vim test.txt时会提示: vim command not found ... 这就是说明我们的Lin ...
- 使用django实现自定义用户认证
参考资料:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/ 直接拉到最后看栗子啦 django自定义用户认证(使用自 ...
- 安装eclipse版本oxygen,及maven导入spring mvc项目并运行
本文地址为:http://www.cnblogs.com/jying/p/7511598.html 系统环境: win10 eclipse版本:2017.09.11 官网下载版本号为 oxygen 1 ...
- Java学习04 (第一遍)
封装.抽象.继承和多态.封装:在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属 ...
- js基础-单体对象日期对象
Math对象 全局对象 日期对象 var t = new Date() t.toLocaleDateString(); t.getFullYear(); t.getMonth() + 1 t.getD ...
- /WebRoot/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- ok6410下的uboot分析与实现
uboot 由两阶段代码组成: •第一阶段主要步骤: 1.将cpu设置为svc模式 2.关闭mmu 3.设置外设端口地址 4.关闭watchdog 5.关闭中断 6.初始化时钟 7.初始化内存DRAM ...
- 微信小程序-获取当前城市位置及再次授权地理位置
微信小程序-获取当前城市位置 1. 获取当前地理位置,可通过wx.getLocation接口,返回经纬度.速度等信息; 注意---它的默认工作机制: 首次进入页面,调用该api,返回用户授权结果,并保 ...