uva 10054 The Necklace(欧拉回路)
| 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 (
) 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
, 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
题目大意:给出一堆珠子,每个珠子有两个颜色,要求判断所给出的珠子是否能连成一个环状的项链。(可以的话要输出)
解题思路:典型的欧拉回路问题,满足1、所有点的入度要等于出度;
2、所有点的联通(这道题目数据没有卡这里)
输出的时候要注意点的自身形成一个环
比如:
1 -> 2
2 -> 3
3 -> 1
2 -> 4
4 -> 2
欧拉回路需要逆序输出。
#include<stdio.h>
#include<string.h>
#define M 52
int num[M];
int map[M][M];
int n; int get_fa(int x){
return num[x] != x?get_fa(num[x]):x;} void print(int k){
for (int i = 0; i < M; i++)
if (map[k][i]){
map[k][i]--;
map[i][k]--;
print(i);
printf("%d %d\n", i , k);
}
} int main(){
int t, bo, k = 1;
int f[M];
scanf("%d" ,&t);
while (t--){
// Init.
memset(f, 0, sizeof(f));
memset(map, 0, sizeof(map));
bo = 0;
for (int i = 0; i < M; i++)
num[i] = i; // Read.
scanf("%d", &n);
for (int i = 0; i < n; i++){
int a, b;
scanf("%d%d", &a, &b);
f[a]++;
f[b]++;
map[a][b]++;
map[b][a]++;
num[get_fa(a)] = get_fa(b);
} // Find.
int god = 0;
for (int i = 0; i < M; i++)
if (f[i] && get_fa(i) == i)
{
god = i;
break;
} // Judge.
for (int i = 0; i < M; i++){
bo += f[i] % 2;
if (f[i] && god != get_fa(i))
bo++;
} // Printf.
printf("Case #%d\n", k++);
if (bo > 0)
printf("some beads may be lost\n");
else
print(god);
if (t)
printf("\n");
}
return 0;}
uva 10054 The Necklace(欧拉回路)的更多相关文章
- UVA 10054 the necklace 欧拉回路
有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...
- UVA 10054 The Necklace(欧拉回路,打印路径)
题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVa 10054 The Necklace(无向图欧拉回路)
My little sister had a beautiful necklace made of colorful beads. Two successive beads in the neckla ...
- uva 10054 The Necklace 拼项链 欧拉回路基础应用
昨天做了道水题,今天这题是比较水的应用. 给出n个项链的珠子,珠子的两端有两种颜色,项链上相邻的珠子要颜色匹配,判断能不能拼凑成一天项链. 是挺水的,但是一开始我把整个项链看成一个点,然后用dfs去找 ...
- UVa 10054 The Necklace【欧拉回路】
题意:给出n个珠子,珠子颜色分为两半,分别用1到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 ...
- UVA 10054 The Necklace (无向图的欧拉回路)
本文链接:http://www.cnblogs.com/Ash-ly/p/5405904.html 题意: 妹妹有一条项链,这条项链由许多珠子串在一起组成,珠子是彩色的,两个连续的珠子的交汇点颜色相同 ...
- UVA 10054 The Necklace 转化成欧拉回路
题意比较简单,给你n个项链碎片,每个碎片的两半各有一种颜色,最后要把这n个碎片串成一个项链,要求就是相邻碎片必须是同种颜色挨着. 看了下碎片总共有1000个,颜色有50种,瞬间觉得普通方法是无法在可控 ...
随机推荐
- 具体分析Struts工作流程
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXV3ZW56aGU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- CSS3图片轮播效果
原文:CSS3图片轮播效果 在网页中用到图片轮播效果,单纯的隐藏.显示,那再简单不过了,要有动画效果,如果是自己写的话(不用jquery等),可能要费点时间.css3的出现,让动画变得不再是问题,而且 ...
- 为什么解析 array_column不可用,
不久前,自己在一个小项目,我要拿出每个元素的一维数组key的值,一维阵列的形成,突然想到php 有一种功能,实现. $array = array ( array ( "id" =& ...
- polay定理总结
参考资料:url=YveSCnlx_dlXo4oGjE8w3_2QRObRXvXMbix81ppCxBGqBswxffwDN9frzY5xxaKf7GgEMY8K93JTPEhkBzY66XOaN0G ...
- Nyoj 吝啬的国度(图论&&双DFS)
描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你 ...
- rabbitMQ说明文档
rabbitMQ是什么 RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开 ...
- java线 生产者和消费者
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- php 开发技巧
以下九种PHP一个非常有用的功能.我不知道你还没有使用?1. 的功能,你可能知道的参数,任意数量PHP我同意你定义一个函数默认参数. 但你可能并不知道PHP还同意你定义一个全然随意的參数的函数以下是一 ...
- ajax——client访问webservice基本用法
学前aps.net当我学会了使用服务器端的访问webservice方法,然后实现一个样本:web server模拟网上购物,今天学习asp.net ajax的时候学习到了client直接訪问webse ...
- C#面向对象复习概要
1.面向对象:我们将具有统一行为和属性的对象抽象划分为类,通过类去创建对象.这种编程思想叫做面向对象的编程思想. 2.属性:对象具有的属性 using System; using System.Col ...