UVA-10054 The Necklace (欧拉回路)
题目大意:有n个珠子,珠子两边的颜色已知,问能否连成一条项链。(两个珠子可以项链当且仅当一个珠子的一边颜色与另一个珠子的另一边颜色相同)。
题目分析:欧拉回路。将颜色视作节点,珠子当做边,问题变成了找一条欧拉回路。
欧拉回路存在的条件:无向图:1.图连通;2.无奇点; 有向图:1.忽略边的方向后,图连通;2.每个点的入度都等于出度;
注意:输出回路的时候要逆序输出。。。
代码如下:
# include<iostream>
# include<cstdio>
# include<vector>
# include<cstring>
# include<algorithm>
using namespace std; int n,du[55],v[55][1005],mp[55][55],vis[55]; void dfs(int u)
{
for(int i=1;i<=v[u][0];++i){
int k=v[u][i];
if(!vis[k]){
vis[k]=1;
dfs(k);
}
}
} bool judge()
{
memset(vis,0,sizeof(vis));
int cnt=0;
for(int i=1;i<=50;++i){
if(du[i]==0)
continue;
if(!vis[i]){
++cnt;
if(cnt>1)
return false;
vis[i]=1;
dfs(i);
}
}
for(int i=1;i<=50;++i)
if(du[i]&1)
return false;
return true;
} void print(int u)
{
for(int i=1;i<=v[u][0];++i){
int k=v[u][i];
if(!mp[u][k])
continue;
--mp[u][k],--mp[k][u];
print(k);
printf("%d %d\n",k,u);///逆序输出
}
} int main()
{
int T,a,b,cas=0;
scanf("%d",&T);
while(T--)
{
memset(du,0,sizeof(du));
memset(mp,0,sizeof(mp));
scanf("%d",&n);
for(int i=0;i<55;++i)
v[i][0]=0;
while(n--)
{
scanf("%d%d",&a,&b);
v[a][++v[a][0]]=b;
v[b][++v[b][0]]=a;
++du[a],++du[b];
++mp[a][b],++mp[b][a];
}
printf("Case #%d\n",++cas);
if(!judge())
printf("some beads may be lost\n");
else{
for(int i=1;i<=50;++i){
if(du[i]>0){
print(i);
break;
}
}
}
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(欧拉回路)
The Necklace My little sister had a beautiful necklace made of colorful beads. Two successive beads ...
- 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种,瞬间觉得普通方法是无法在可控 ...
随机推荐
- vim初级命令
命令 说明 光标移动 h 左 l(小写L) 右 j 下 k 上 w 移动到下一个单词 b 移动到上一个单词 插入 i 在当前光标处进行编辑 I(大写i) 在行首插入 A 在行末插入 a ...
- 233. Number of Digit One(统计1出现的次数)
Given an integer n, count the total number of digit 1 appearing in all non-negative integers less th ...
- yarn nodes label (yarn 划分子集群)
yarn node labels 特性给节点打标签可以把特性类似的节点分成一组,这样可以指定特定的应用执行在特定的机器群上.现在我们只支持节点划分,1.一个节点仅能有一个节点划分,即一个节点只能打一个 ...
- Django---ModelForm详解
示例: from django.db import models from django.forms import ModelForm TITLE_CHOICES = ( ('MR', 'Mr.'), ...
- javascript里用php
<script type="text/javascript" > <?php if (!empty($searchResult)):?> $.searchM ...
- Send2MyKindle使用说明文档
软件下载地址为:Send2MyKindle 功能简介 该软件主要功能为在Windows下将Kindle电子书发送到亚马逊中国网站注册的Kindle账户.整个软件界面如下图所示: 使用步骤 使用前的准备 ...
- C++ 程序崩溃时生成Dump文件
#include <DbgHelp.h> //生产DUMP文件 int GenerateMiniDump(HANDLE hFile, PEXCEPTION_POINTERS pExcept ...
- Job流程:Shuffle详解
此文承接Job流程:Mapper类分析.MapReduce为确保每个reducer的输入都按键排序,数据从map输出到reducer输入的这段过程成为Shuffle. map端 1).Spill溢写. ...
- Shell学习小结 - 深入认识变量
移动端访问不佳,请访问我的个人博客 变量的命名 对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对. 列如: str="hello" 这里的str就是变量 ...
- jQuery的$.each()遍历checkbox
$("input[type='checkbox']").each(function(){ var value = $(this).val(); //获得值 $(this).attr ...