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

题意:

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

思路:

题目很明显的是欧拉道路的问题。

欧拉道路的关键是:

①图是连通的。

②最多只能有两个奇点。(不能只存在一个奇点)

本来是想用map映射的,但是太多了,比较费时,这里用字典树的话会比较省时,判断图是否连通可以用并查集来完成。

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<string>
  4. #include<cstring>
  5. using namespace std;
  6.  
  7. const int maxn = + ;
  8. int p[maxn], deg[maxn];
  9. int cnt;
  10.  
  11. struct Trie
  12. {
  13. int ch[maxn][];
  14. int vis[maxn];
  15. int sz;
  16.  
  17. void init()
  18. {
  19. sz = ;
  20. memset(ch[], , sizeof(ch[]));
  21. }
  22.  
  23. int insert(char *s, int& v)
  24. {
  25. int u = , n = strlen(s);
  26. for (int i = ; i < n; i++)
  27. {
  28. int c = s[i]-'a';
  29. if (!ch[u][c])
  30. {
  31. memset(ch[sz], , sizeof(ch[sz]));
  32. vis[sz] = ;
  33. ch[u][c] = sz++;
  34. }
  35. u = ch[u][c];
  36. }
  37. if (!vis[u]) vis[u] = ++v;
  38. return vis[u];
  39. }
  40. }t;
  41.  
  42. int find(int x)
  43. {
  44. return x == p[x] ? x : find(p[x]);
  45. }
  46.  
  47. void merge(int x, int y)
  48. {
  49. int fx = find(x);
  50. int fy = find(y);
  51. if (fx != fy)
  52. p[fx] = fy;
  53. }
  54.  
  55. int main()
  56. {
  57. //freopen("D:\\txt.txt", "r", stdin);
  58. char a[], b[];
  59. t.init();
  60. memset(deg, , sizeof(deg));
  61. for (int i = ; i <= maxn; i++) p[i] = i;
  62. cnt = ;
  63. while (~scanf("%s %s", a, b))
  64. {
  65. int id1 = t.insert(a,cnt);
  66. int id2 = t.insert(b,cnt);
  67. deg[id1]++;
  68. deg[id2]++;
  69. merge(id1, id2);
  70. }
  71. int ans = ;
  72. for (int i = ; i <= cnt; i++)
  73. {
  74. if (deg[i] % == ) ans++;
  75. if (ans > || find() != find(i))
  76. {
  77. printf("Impossible\n");
  78. return ;
  79. }
  80. }
  81. if (ans == )
  82. printf("Impossible\n");
  83. else
  84. printf("Possible\n");
  85. return ;
  86. }

POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)的更多相关文章

  1. POJ 2513 无向欧拉通路+字典树+并查集

    题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...

  2. POJ 2513 Colored Sticks(欧拉回路,字典树,并查集)

    题意:给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的.   无向图存在欧拉路的充要条件为: ①     图是连通的: ②     所有节 ...

  3. POJ 2513 - Colored Sticks - [欧拉路][图的连通性][字典树]

    题目链接: http://poj.org/problem?id=2513 http://bailian.openjudge.cn/practice/2513?lang=en_US Time Limit ...

  4. [欧拉] poj 2513 Colored Sticks

    主题链接: http://poj.org/problem? id=2513 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Tota ...

  5. poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)

    题目链接:poj 2513 Colored Sticks 题目大意:有N个木棍,每根木棍两端被涂上颜色.如今给定每一个木棍两端的颜色.不同木棍之间拼接须要颜色同样的 端才干够.问最后是否能将N个木棍拼 ...

  6. POJ2513 Colored Sticks(欧拉)

    题目链接. 题目大意: 给很多木棍,两端被涂了颜色.任意两根木棍的相同颜色处可以拼接在一起,问有没有可能将所有的木棍都连起来,成一条直线? 分析: 考点,欧拉道路. 将一根木棍看成一条边,两端的颜色看 ...

  7. POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)

    下面两个写得很清楚了,就不在赘述. http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.htmlhttp://www.cnblogs.com/lyy2890 ...

  8. POJ - 2513 Colored Sticks(欧拉通路+并查集+字典树)

    https://vjudge.net/problem/POJ-2513 题解转载自:優YoU  http://user.qzone.qq.com/289065406/blog/1304742541 题 ...

  9. POJ 2513 Colored Sticks (欧拉回路 + 字典树 +并查集)

    Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 27097   Accepted: 7175 ...

随机推荐

  1. PHP概率算法---砸金蛋示例

    这是一个很经典的概率算法: function get_rand($proArr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); ...

  2. OneThink后台模型怎么玩?

    OneThink 后台模型有个模型类型: 模型下——>设计——>表单显示分组(怎么玩?) 这个将会显示在:内——>发布文章内容的时候: 单选按钮: 内容模块显示: 枚举类型可以这样玩 ...

  3. Scikit Learn安装教程

    Windows下安装scikit-learn 准备工作 Python (>= 2.6 or >= 3.3), Numpy (>= 1.6.1) Scipy (>= 0.9), ...

  4. PHP 的“魔术常量”

    名称 说明 __LINE__ 文件中的当前行号. __FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路 ...

  5. HDU_5521_Meeting

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  6. Git学习-->关于Jenkins编译时候,如何获取Git分支的当前分支名?

    一.背景 因为代码都迁移到了Gitlab,所以Jenkins编译的时候我们都需要将之前的SVN信息换成现在的Git信息.最近编译一个Lib库的时候,因为团队规定上传Release版本的AAR到Mave ...

  7. oracle(十二)redo 与 undo

    1.undo:回滚未提交的事务.未提交前,内存不够用时,DBWR将脏数据写入数据文件中,以腾出内存空间. 这就是undo存在的原因. redo:恢复所有已提交的事务 2.实例失败(如主机掉电)可能出现 ...

  8. Oracle SQL语句积累

    字段合并: select EVFOUNDATIONTYPEA || EVFOUNDATIONTYPEB|| EVFOUNDATIONTYPEC ||EVFOUNDATIONTYPED as b fro ...

  9. AngularJS SQL

    服务端代码 以下列出了列出了几种服务端代码类型: 使用 PHP 和 MySQL.返回 JSON. 使用 PHP 和 MS Access.返回 JSON. 使用 ASP.NET, VB, 及 MS Ac ...

  10. pyenv常用命令

    pyenv使用教程 安装 Mac brew install pyenv brew install pyenv-virtualenv 配置 echo 'eval "$(pyenv init - ...