POJ 2513

有N根木棒,一根木棒有2头,我们把每头涂色(相同或不同),如果2根木棒有相同颜色的一端就可以连接,颜色全部不同就不能连接,现在给你N根木棒以及它们的颜色,问最后能不能链接成1条链。

欧拉回路的问题,判断联通  以及  奇点个个数

输入为字符串,开始并不知道怎么弄,参考了下别人的报告,用字典树处理(学到的新东西),

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. using namespace std;
  7.  
  8. const int N = 15;
  9. const int M = 1000010;
  10.  
  11. struct node
  12. {
  13. int num;
  14. node* next[26];
  15. }*Head;
  16.  
  17. char u[N], v[N];
  18. int num, n, top, total;
  19. bool flag;
  20. int pre[M], in[M];
  21. node pnode[M];
  22.  
  23. int fin(int x) //递归+路径压缩
  24. {
  25. return pre[x] == -1 ? x : (pre[x] = fin(pre[x]));
  26. }
  27.  
  28. void Uni(int x, int y) //合并
  29. {
  30. int root1 = fin(x);
  31. int root2 = fin(y);
  32. if(root1 != root2)
  33. pre[root2] = root1;
  34. }
  35.  
  36. int insert(char str[]) //返回数组下标
  37. {
  38. Head = &pnode[0];
  39. int len = strlen(str);
  40. for(int i = 0; i < len; ++i)
  41. {
  42. int temp = str[i] - 'a';
  43. if(Head->next[temp] == NULL)
  44. Head->next[temp] = &pnode[++num];
  45. Head = Head->next[temp];
  46. }
  47. if(Head->num == 0)
  48. Head->num = top++;
  49. return Head->num;
  50. }
  51.  
  52. void init()
  53. {
  54. num = total = 0; top = 1; flag = true;
  55. memset(in,0,sizeof(in));memset(pre,-1,sizeof(pre));
  56. for(int i = 0; i <M ; ++i)
  57. {
  58. pnode[i].num = 0;
  59. for(int j = 0; j < 26; ++j)
  60. pnode[i].next[j] = NULL;
  61. }
  62. }
  63.  
  64. int main()
  65. {
  66. int tmp, temp;
  67. init();
  68. while(scanf("%s %s", u, v) != EOF)
  69. {
  70. tmp = insert(u); temp = insert(v);
  71. in[tmp]++; in[temp]++;
  72. Uni(tmp, temp);
  73. }
  74. int root = fin(1);
  75. for(int i = 1; i < top; ++i) //判断是否联通,奇点
  76. {
  77. if(root != fin(i))
  78. {
  79. flag = false;
  80. break;
  81. }
  82. if(in[i] & 1)
  83. total++;
  84. if(total > 2)
  85. break;
  86. }
  87. // 奇点为0 环 ,奇点为2 链
  88. puts(((total == 0 || total == 2) && flag == true) ? "Possible" : "Impossible");
  89. return 0;
  90. }

  

POJ2513 欧拉 + 字典树的更多相关文章

  1. 数据结构&图论:欧拉游览树

    ETT可以称为欧拉游览树,它是一种和欧拉序有关的动态树(LCT是解决动态树问题的一种方案,这是另一种) dfs序和欧拉序是把树问题转化到区间问题上然后再用数据结构去维护的利器 通过借助这两种形式能够完 ...

  2. POJ2513:Colored Sticks(字典树+欧拉路径+并查集)

    http://poj.org/problem?id=2513 Description You are given a bunch of wooden sticks. Each endpoint of ...

  3. poj2513 Colored Sticks —— 字典树 + 并查集 + 欧拉回路

    题目链接:http://poj.org/problem?id=2513 题解:通过这题了解了字典树.用字典树存储颜色,并给颜色编上序号.这题为典型的欧拉回路问题:将每种颜色当成一个点.首先通过并查集判 ...

  4. HYSBZ - 3813 奇数国 欧拉函数+树状数组(线段树)

    HYSBZ - 3813奇数国 中文题,巨苟题,巨无敌苟!!首先是关于不相冲数,也就是互质数的处理,欧拉函数是可以求出互质数,但是这里的product非常大,最小都2100000,这是不可能实现的.所 ...

  5. poj2513--并查集+欧拉路+字典树

    经典好题,自己不知道哪里错了交上去是RE,可能是数组开的不好吧,字典树老碰到这种问题.. 先马上别人的代码,有空对拍看看 #include <cstdio> #include <cs ...

  6. BZOJ 3786: 星系探索 欧拉游览树

    一个叫 Euler-Tour-Tree 的数据结构,说白了就是用 Splay_Tree 维护欧拉序 #include <cstring> #include <algorithm> ...

  7. poj-2513(字典树+欧拉通路)

    题意:给你n个火柴棍,每个火柴棍头和尾两种颜色,问你是否存在能够把这些火柴棍摆成一行的情况,两个相连的火柴棍的颜色需要一样: 解题思路:最初的思路是用map标记颜色,然后把每种颜色看作点,每根火柴棍看 ...

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

    http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...

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

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

随机推荐

  1. 冲刺NO.7

    Alpha冲刺第七天 站立式会议 项目进展 前期数据库设计所遗留的问题在今天得到了部分的解决,对物资管理所需要的数据内容进行了细化,但并未开始编写物资相关模块,主要精力还是放在项目的核心功能(信用管理 ...

  2. verilog学习笔记(2)_一个小module及其tb

    module-ex_cnt module ex_cnt( input wire sclk, input wire rst_n, output wire[9:0] cnt ); reg [9:0] cn ...

  3. Flask Markup 上下文,request

    在模板渲染中,使用Markup转换变量中的特殊字符 from flask import Markup Markup函数对字符串进行转移处理再传递给render_template()函数 在浏览器中显示 ...

  4. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  5. IE bug:ajax请求返回304解决方案

    bug说明: 同一账户下的默认收货地址只有一个,默认收货地址可以修改,修改完成后,使用ajax重新加载收货地址部分. 默认收货地址状态标记:status = 1: 在IE浏览器做了修改后,重新加载的数 ...

  6. WPS怎么让前几页的页眉或者页脚与后面的不同

    其实不管利用WPS还是office对文档还是PPT进行操作,其实核心思想还是一种编程,主要是前端的编程,就是通过改变一些这些软件设置的样式,然后通过改变这些样式,使这些文字以老师要求的格式显示出来的, ...

  7. Full-Stack-Fundation-Udacity------Lesson 1 Working with CRUD

    因为手头在做一个项目,我负责后台,就顺带快进学习Udacity上一个水课(?):Full Stack Foundation.上课的好像是个印度小哥(?),按1.5倍速听讲话还是有点逗的.废话不多说,进 ...

  8. Struts2 配置文件小结

    每次写的博文都被管理员都被移出首页,好气!还希望有哪位大神可以指点迷津-- struts2 配置文件的 result 节点 result 节点是 action 节点的子节点,他代表着 action 方 ...

  9. Python内置函数(42)——hash

    英文文档: hash(object)Return the hash value of the object (if it has one). Hash values are integers. The ...

  10. linux——网络基础

    装完linux系统要对网络(ip地址,子网掩码,网关,DNS)进行配置,才能连接网络 一,开启网卡eth0 CentOS显示没有网卡(eth0) 2.设置静态IP vim /etc/sysconfig ...