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种,瞬间觉得普通方法是无法在可控 ...
随机推荐
- LDA算法里面Dirichlet分布的两个参数alpha和beta怎样确定?
本文参考自:https://www.zhihu.com/question/21692336/answer/19387415 方法一: alpha 是 选择为 50/ k, 其中k是你选择的topi ...
- WEB前端研发工程师编程能力成长之路(1)
[背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧: 如果你是四五年的前端开发高手,没有难题能难得住 ...
- web前端攻城狮整理的收藏夹
作为一名web前端开发工程师你的收藏夹存对了吗?下面是一份互联网上流传甚广的web前端开发收藏夹资源,包含学习网站.JS库.常用工具.常用插件.资讯书籍等资源.速速转存吧~ 一.学习网站 W3 ...
- git 更新某个文件
1.拉取某个仓库的某个文件 git fetch git checkout origin/master test.php
- 懒加载 js----例子------图片
转载自:https://www.jianshu.com/p/9b30b03f56c2 懒加载工具类 <script type="text/javascript"> // ...
- Eclipase .自动提示
打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为 .abc ...
- FFmpeg 入门(4):线程分治
本文转自:FFmpeg 入门(4):线程分治 | www.samirchen.com 概览 上一节教程中,我们使用 SDL 的音频相关的函数来支持音频播放.SDL 起了一个线程来在需要音频数据的时候去 ...
- awk循环语句-【AWK学习之旅】
AWK中两种循环语句:if-else 和 while 控制流语句: 1.if-else 求总数,平均值: [root@monitor awkdir]# awk '$3>6 {n = n ...
- 广播机制的CS模型实现
广播机制的cs模型实现如下: 首先可以使用ifconfig命令查看自己所在网段的广播地址 server.c #include<stdio.h> #include<unistd.h&g ...
- Spring MVC工作流程图
图一 图二 Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. Disp ...