http://poj.org/problem?id=2513

题意 : 一些木棒,两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。

思路 : 这个题的话就比较麻烦,不过倒也好理解,有并查集,树来保存字符串集合,用图论知识来解决就可以了,这个题如果把木棒看成一条边,木棒一端具有相同颜色的看成同一个点,因此可以转化成一个图中判断能否一笔画,就是给你一个无向图,让你判断是否存在欧拉路。而无向图中存在欧拉路的的条件有两个,一个是图要是联通的,二是所有节点的度为偶数度,或者奇数度节点为偶数个,其实就是两个。

至于欧拉图,欧拉路什么的我就不再赘述,看了一位大神的博客写的挺好的

http://www.cnblogs.com/buptLizer/archive/2012/04/15/2450297.html,大家不清楚的可以了解一下。

判断图联通的话用并查集,这个题一看就能看出来用并查集,至于用树来保存字符串集合,并不是太会,后来会神给讲了讲,就是在厚的白皮书第208页,有兴趣的可以看一看,还有一点,我代码中定义的maxn,一开始我开到110,结果MLE了,开到70也MLE,后来我玩心起来就去挨个试了一下,开到29,内存是59736,开到15,内存是23804,开到50的话内存就是108628了,好神奇的样子

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
using namespace std ;
const int maxn = ;
const int maxm = ;
int bing[maxm],deg[maxm];
int ch[maxm][maxn] ;
int vis[maxm] ;
int cnt = ;
struct Trie
{
int sz ;//节点总数
void TTrie()//初始时只有一个根节点
{
sz = ;
memset(ch[],,sizeof(ch[])) ;
}
int idx(char c)
{
return c-'a' ; //字符c的编号
}
//插入字符串s,附加信息为v,注意v必须为非0,因为0代表“本节点不是单词节点”
int insert(char *s)
{
int u = ,n = strlen(s) ;
for(int i = ; i < n ; i++)
{
int c = idx(s[i]) ;
if(!ch[u][c])//节点不存在
{
memset(ch[sz],,sizeof(ch[sz]));
vis[sz] = ;//中间节点的附加信息为0
ch[u][c] = sz++ ;//新建节点
}
u = ch[u][c] ;//往下走
}
if(!vis[u])
vis[u] = ++cnt ;
return vis[u] ;
//vis[u] = v ; //字符串中的最后一个字符的附件信息为v
}
};
int find(int x)
{
if(x != bing[x])
bing[x] = find(bing[x]) ;
return bing[x] ;
}
void merge(int x,int y)
{
int fx = find(x) ;
int fy = find(y) ;
if(fx != fy)
bing[fx] = fy ;
}
void Init()
{
memset(deg,,sizeof(deg)) ;
for(int i = ; i <= maxm ; i++)
bing[i] = i ;
}
int main()
{
Trie trie ;
char a[],b[] ;
Init() ;
trie.TTrie() ;
while(~scanf("%s %s",a,b))
{
int id1 = trie.insert(a) ;
int id2 = trie.insert(b) ;
deg[id1]++ ;
deg[id2]++ ;
merge(id1,id2) ;
}
int ans = ;
for(int i = ; i <= cnt ;i++)
{
if(deg[i]% == )
ans++ ;
if(ans > ||find() != find(i))
{
printf("Impossible\n") ;
return ;
}
}
if(ans == )
printf("Impossible\n") ;
else
printf("Possible\n") ;
return ;
}

这个题还有很多牛人用的哈希做的,把链接粘过来,与君共勉

http://zhyu.me/acm/poj-2513.html

http://wenku.baidu.com/view/ca2af01dfc4ffe473368ab41.html

POJ2513Colored Sticks的更多相关文章

  1. POJ2513Colored Sticks(欧拉通路)(字典树)(并查集)

                                                             Colored Sticks Time Limit: 5000MS   Memory ...

  2. POJ2513-Colored Sticks

    /*思路:类似图论中“一笔画”问题,两根木棒的相连接的端点是一样的颜色,(a,b)--(b,c)--(c, d)....方法:trie树+并查集, 利用trie树建立字符串和某一个节点的映射,并将这些 ...

  3. poj2513Colored Sticks(无向图的欧拉回路)

    /* 题意:将两端涂有颜色的木棒连在一起,并且连接处的颜色相同! 思路:将每一个单词看成一个节点,建立节点之间的无向图!判断是否是欧拉回路或者是欧拉路 并查集判通 + 奇度节点个数等于2或者0 */ ...

  4. poj2513- Colored Sticks 字典树+欧拉通路判断

    题目链接:http://poj.org/problem?id=2513 思路很容易想到就是判断欧拉通路 预处理时用字典树将每个单词和数字对应即可 刚开始在并查集处理的时候出错了 代码: #includ ...

  5. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. POJ 2653 Pick-up sticks (线段相交)

    题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...

  7. hduoj 1455 && uva 243 E - Sticks

    http://acm.hdu.edu.cn/showproblem.php?pid=1455 http://uva.onlinejudge.org/index.php?option=com_onlin ...

  8. POJ 2653 Pick-up sticks【线段相交】

    题意:n根木棍随意摆放在一个平面上,问放在最上面的木棍是哪些. 思路:线段相交,因为题目说最多有1000根在最上面.所以从后往前处理,直到木棍没了或者最上面的木棍的总数大于1000. #include ...

  9. POJ1065Wooden Sticks[DP LIS]

    Wooden Sticks Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21902   Accepted: 9353 De ...

随机推荐

  1. linux系统man查询命令等级与意义

    代号 意义 1 可执行程序和一般shell命令 2 系统调用函数 3 库函数 4 设备配置文件,通常在/dev下 5 配置文件,/ec下 6 游戏 7 协议及杂项 8 管理员命令 9 与内核相关

  2. java.util.TreeMap源码分析

    TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器. 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n ...

  3. centos6.5安装flume

    这里安装flume是因为游戏业务日志搜集和分析用的 1.安装java 环境rpm -ivh jdk-8u51-linux-x64.rpm Preparing... ################## ...

  4. 《Usermod:user lee is currently logged in 家目录不能改变解决方法》

    前面短时间自己玩samba服务时,上面的所有服务都做好了,家目录死活就是不能访问,删掉自己的smb.conf文件,自己到别的服务上用rsync同步过来的文件,启动服务家目录还是不能访问,排了一下午,终 ...

  5. SDRAM控制器

    1 初始化以及load mode 寄存器1 初始化以及load mode 寄存器 2  时间表 这里会有几个重要的时间周期: 3 AUTO REFRESH (自动刷新) 4 CAS(CL delay) ...

  6. Nginx +keepalived

    Nginx +keepalived   配置高可用的Nginx 准备环境: 节点node17,node18   lftp 172.16.0.1:/pub/Sources/6.x86_64/nginx ...

  7. AngularJS(14)-动画

    AngularJS 提供了动画效果,可以配合 CSS 使用. AngularJS 使用动画需要引入 angular-animate.min.js 库. <!DOCTYPE html> &l ...

  8. js日期相关函数总结分享

    一个倒计时程序,因为经常要在手机端访问,所以没有引用jquery,对于用习惯jquery的我还真不习惯. 下面简单说明js日期相关函数,并说明实现倒计时的原理 var dateTo=new Date( ...

  9. WordPress 主题开发 - (一) 前言 待翻译

    原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...

  10. openerp学习笔记 调用工作流

    获取工作流服务:wf_service = netsvc.LocalService("workflow")删除对象对应记录的工作流:wf_service.trg_delete(uid ...