UVA 10054 The Necklace 转化成欧拉回路
题意比较简单,给你n个项链碎片,每个碎片的两半各有一种颜色,最后要把这n个碎片串成一个项链,要求就是相邻碎片必须是同种颜色挨着。
看了下碎片总共有1000个,颜色有50种,瞬间觉得普通方法是无法在可控时间内做出来的,因为碎片到底放哪里以及是正着放还是反着放都是不可控的。
这个时候数学建模就真的好重要了,如果我们能把颜色作为节点,一个碎片就表示两个节点连了一条路,那其实就是走了一遍欧拉回路,就意味着项链做成了。
太叼了,这个思想真心不错。。。LRJ书上的提示,否则我还真是想不到可以这样。
不过还有个问题就是,欧拉回路用的DFS,按题目这个数据规模应该是会TLE的。
写上一句的时候突然灵感了一下,普通DFS是 状态^层数 为复杂度,这个看似层数特别多 假设有n条边,就应该要递归n层,就有50^n,,,但其实错了,欧拉回路走完所有的路就终止了,所以越到下面可选状态越少,最终还是最多1000个状态就可以了(即总路径条数)这也是为什么这个DFS不会TLE
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int mat[][];
int deep[];
void init()
{
memset(mat,,sizeof mat);
memset(deep,,sizeof deep);
}
void euler(int u)
{
for (int i=;i<=;i++){
while (mat[u][i]){ //可能有多个同样的碎片,意味着两个节点有多条边
mat[u][i]--;
mat[i][u]--;
euler(i);
printf("%d %d\n",i,u);//dfs是反过来的,因此把孩子输出在前面,使得回路正确
}
}
}
int main()
{
int t,n,a,b,kase=;
scanf("%d",&t);
while (t--){
init();
scanf("%d",&n);
for (int i=;i<n;i++){
scanf("%d%d",&a,&b);
deep[a]++;deep[b]++;
mat[a][b]++;mat[b][a]++;
}
printf("Case #%d\n",++kase);
bool flag=;
for (int i=;i<=;i++){
if (deep[i]%==){flag=;break;}
}
if (flag){
puts("some beads may be lost");
if (t) puts("");
continue;
}
int u=;
while (deep[u]==) u++;
euler(u);
if (t) puts("");
}
return ;
}
UVA 10054 The Necklace 转化成欧拉回路的更多相关文章
- uva 10054 The Necklace 拼项链 欧拉回路基础应用
昨天做了道水题,今天这题是比较水的应用. 给出n个项链的珠子,珠子的两端有两种颜色,项链上相邻的珠子要颜色匹配,判断能不能拼凑成一天项链. 是挺水的,但是一开始我把整个项链看成一个点,然后用dfs去找 ...
- UVa 10054 The Necklace BFS+建模欧拉回路
算法指南 主要就是建立欧拉回路 #include <stdio.h> #include <string.h> #include <iostream> #includ ...
- UVA 10054 The Necklace (无向图的欧拉回路)
本文链接:http://www.cnblogs.com/Ash-ly/p/5405904.html 题意: 妹妹有一条项链,这条项链由许多珠子串在一起组成,珠子是彩色的,两个连续的珠子的交汇点颜色相同 ...
- UVA 10054 The Necklace
完全就是哭瞎的节奏···QAQ 又是图论··· 题意:有一种项链,每个珠子上有两种颜色,相同颜色的两颗珠子的两头相连,如果能连成环输出珠子的顺序,不能连成环输出"some beads may ...
- 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个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...
- UVa 10054 The Necklace【欧拉回路】
题意:给出n个珠子,珠子颜色分为两半,分别用1到50之间的数字表示, 现在给出n个珠子分别的颜色,问是否能够串成一个环.即为首尾相连,成为一个回路 判断是否构成一个环,即判断是否为欧拉回路,只需要判断 ...
- uva 10054 The Necklace(欧拉回路)
The Necklace My little sister had a beautiful necklace made of colorful beads. Two successive beads ...
随机推荐
- 【CF1217F】Forced Online Queries Problem
题意 题目链接 动态图连通性,加密方式为 \((x+l-1)\bmod n +1\) (\(l=[上一次询问的两点连通]\)). 点数 \(n\),操作数 \(m\) \(\le 2\times 10 ...
- LeetCode347:返回频率前K高的元素,基于优先队列实现
package com.lt.datastructure.MaxHeap; import java.util.LinkedList; import java.util.List; import jav ...
- python2学习------基础语法4(模块)
1.整体结构层次(a.py,b.py) 目标:b.py文件中导入a.py里面定义的class A,并调用A类里面的属性或相关方法. 2.模块导入 <1> __init__.py < ...
- TCP为什么三次握手四次挥手
TCP概述: 它提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接.因此TCP是一种可靠的的运输服务,也正因为这样,不可避免的增加了许多额外的开销,比如确认,流量控制等.对应的 ...
- POJ 3371:Flesch Reading Ease 模拟
Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2071 Accepted: 60 ...
- XV6源代码阅读-进程线程
Exercise1 源代码阅读 1.基本头文件:types.h param.h memlayout.h defs.h x86.h asm.h mmu.h elf.h types.h:仅仅是定义uint ...
- 003.Oracle数据库 , 查询日期格式格式化
/*日期格式转换*/ SELECT TO_CHAR( OCCUR_DATE, 'yyyy/mm/dd hh24:mi:ss' ) FROM LM_FAULT WHERE ( ( OCCUR_DATE ...
- Spark 资料整理
http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ http://blog.csdn.net/aliv ...
- ej3-1优先使用静态工厂方法而非构造函数来创建对象
背景 很早之前就已经自己翻译了,先简单的贴出来,并做一下回顾. 条款1 优先使用静态工厂方法而非构造函数来创建对象 允许客户端创建一个实例的传统方法是:提供一个公共构造函数:有另外一个必须成为每个程序 ...
- leetcode1162 As Far from Land as Possible
""" Given an N x N grid containing only values and , represents water and represents ...