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 = 26 ;
const int maxm = 521521 ;
int bing[maxm],deg[maxm];
int ch[maxm][maxn] ;
int vis[maxm] ;
int cnt = 0 ;
struct Trie
{int sz ;//节点总数void TTrie()//初始时只有一个根节点
    {sz = 1 ;memset(ch[0],0,sizeof(ch[0])) ;}int idx(char c){return c-'a' ; //字符c的编号
    }//插入字符串s,附加信息为v,注意v必须为非0,因为0代表“本节点不是单词节点”int insert(char *s){int u = 0 ,n = strlen(s) ;for(int i = 0 ; i < n ; i++){int c = idx(s[i]) ;if(!ch[u][c])//节点不存在
            {memset(ch[sz],0,sizeof(ch[sz]));vis[sz] = 0 ;//中间节点的附加信息为0ch[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,0,sizeof(deg)) ;for(int i = 0 ; i <= maxm ; i++)bing[i] = i ;
}
int main()
{Trie trie ;char a[100],b[100] ;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 = 0;for(int i = 1 ; i <= cnt ;i++){if(deg[i]%2 == 1)ans++ ;if(ans > 2||find(1) != find(i)){printf("Impossible\n") ;return 0 ;}}if(ans == 1)printf("Impossible\n") ;elseprintf("Possible\n") ;return 0 ;
}

View Code

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

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

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

转载于:https://www.cnblogs.com/luyingfeng/p/3278606.html

POJ2513Colored Sticks相关推荐

  1. POJ2513-Colored Sticks

    题目链接:点击打开链接 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 39392   Acc ...

  2. POJ2513Colored Sticks(欧拉路加字典树)

    传送门 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namesp ...

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

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

  4. poj2513Colored Sticks(无向图判欧拉路、回路+trie树)

    http://poj.org/problem?id=2513 每个单词为一个节点 并查集判联通 度数为偶数或有两个为奇数 4A 第三次是由于有多余的测试输出没删掉 前两次统计多少个单词 统计错了 Vi ...

  5. HDU1051Wooden Sticks

    Wooden Sticks http://acm.hdu.edu.cn/showproblem.php?pid=1051 #include<stdio.h> struct stick{ i ...

  6. UVa307 - Sticks(DFS+剪枝)

    题意:给出若干个一样长的sticks,剪断后有n个部分,问原来sticks的最小长度. 思路:首先要确定sticks的长度范围,范围应该在[max(n1,n2..., n), sum(n1,n2... ...

  7. HDU-1051 Wooden Sticks

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

  8. 欧拉路径 之 poj 2513 Colored Sticks

    /* 欧拉路径 之 poj 2513 Colored Sticks欧拉路径: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径.无向图存在欧拉路径 充要条件:1) 图是连通的 ...

  9. Codeforces Round #297 (Div. 2)C. Ilya and Sticks 贪心

    Codeforces Round #297 (Div. 2)C. Ilya and Sticks Time Limit: 2 Sec  Memory Limit: 256 MB Submit: xxx ...

  10. codeforces654题解_[codeforces 1374A] Magical Sticks 棍子拼接

    Codeforces Round #654 (Div. 2)   参与排名人数14349   本场比赛主要心思放在观摩高手如何打比赛,发现初中生真的很厉害. [codeforces 1374A]    ...

最新文章

  1. R语言plotly可视化:plotly可视化水平直方图(Horizontal Histogram)
  2. 微信小程序 倒计时实现
  3. Windows anaconda python3 import ssl报错的解决方案
  4. pcl中PrincipalCurvatures 和 Normal中的curvature的区别
  5. undefind_undefined什么意思
  6. Xamarin.Android 使用ListView绑定数据
  7. 思科认证36个热门考点汇总
  8. matlab调用Java程序时出现 Java.lang.OutOfMemoryErrot: GC overhead limit exceeded
  9. php 分布式数据库查询,分布式数据库
  10. AOP拦截器 表达式写法
  11. jquery------导入jquery.2.2.3.min.js
  12. EonerCMS——做一个仿桌面系统的CMS(十四)
  13. DDNS设置(自用)
  14. java servlet验证码_Servlet 实现验证码
  15. hdu 5755 Gambler Bo 三进制高斯消元(开关问题变形)
  16. 个性化Ubuntu壁纸如何添加
  17. 猴子捞月排序算法 (随机排序)
  18. 涨知识了,原来微信可以一键找到对方位置
  19. 指针--指针的创建和指针的大小
  20. 【架构分析】Weston Inside - 基础数据结构详解

热门文章

  1. Linux学习(1)阿里云服务器及配置、使用xshell远程连接
  2. linux挂载sata硬盘分区,Linux下挂载硬盘分区的几种方法
  3. BigInteger简单使用及方法总结
  4. 多人在线答题游戏 小程序 (规划设计方案)
  5. Centos7 安装solr及配置
  6. Zend Studio9.02 字体显示,WIN7系统
  7. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_5 响应之使用forward和redirect进行页面跳转...
  8. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_15maven工程servlet实例之导入项目依赖...
  9. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_1_使用传统的方式,遍历集合,对集合进行过滤...
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_2_对象的序列化流_ObjectOutputStream...