题目链接:点击查看

题目大意:给出n个木棍,问若两两相连,最终能否构成一根长直木棍,相连的规则是两个木棍的相接端点的颜色需要保持相同

题目分析:关于这个题目,我们可以将每个木棍视为一条边,每个木棍的两个端点视为两个顶点,问能否相连,我们可以联想到欧拉回路,也就是说必须满足下面的两个条件:

  1. 所有的顶点能够构成回路
  2. 所有度数为奇数的顶点只能有零个或两个

如此一来题目就简单多了,但还是存在许多细节需要处理,首先,判断能否构成回路,我们可以直接用并查集,但问题就在于每个顶点题目给出的是字符串,再加上这是poj上的题,不能用哈希map映射,用普通map映射的话又要付出logn的时间代价,积少成多就会让这个题目超时,所以我们需要换个方法映射,我是想到了用哈希,但哈希出来的答案并不是连续的,不太好用并查集,后来去网上看了题解才知道,原来字典树还可以充当哈希,给每个单词都规定一个编号,并且最重要的是这个编号是连续的,这样一来就解决了映射的问题,每次查询编号的时间复杂度只有O(10)(因为这个题目中的每个字符串最大只有10个字符的长度),当我们映射成数字之后就不用再使用那些字符串了,所以在读入的时候也不需要储存,在线处理即可,等到输入结束后,先判断一下度数情况,若度数情况都不满足,直接输出impossible就行了,若度数情况满足了,我们就再用并查集查询一下所有节点的父亲是否都是同一个节点,因为在查询的时候用了路径压缩,所以每次并查集查询的时间复杂度可以达到O(1),这样一来时间复杂度就可以下降到O(n)了,就可以完美解决这个题目了

这个题目我感觉很好,用到了很多算法知识的结合,单个算法拿出来可能并不难,但混合到了一起就非常考验综合能力了

上代码吧,实现起来并不是很复杂:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=5e5+100;int k=1;int cnt=0;int trie[N*10][26];int node[N*10];int f[N];int du[N];int insert(char s[])
{int len=strlen(s);int pos=0;for(int i=0;i<len;i++){int to=s[i]-'a';if(!trie[pos][to])trie[pos][to]=k++;pos=trie[pos][to];}if(node[pos])return node[pos];elsereturn node[pos]=++cnt;
}int find(int x)
{return x==f[x]?x:f[x]=find(f[x]);
}bool check()
{int sum=0;for(int i=1;i<=cnt;i++)if(du[i]&1)sum++;if(sum==1||sum>=3)return false;int target=find(1);for(int i=2;i<=cnt;i++)if(find(i)!=target)return false;return true;
}int main()
{
//  freopen("input.txt","r",stdin);for(int i=0;i<N;i++)f[i]=i;char s1[15],s2[15];while(scanf("%s%s",s1,s2)!=EOF){int a=insert(s1);int b=insert(s2);du[a]++;du[b]++;int aa=find(a);int bb=find(b);if(aa!=bb)f[aa]=bb;}if(check())printf("Possible\n");elseprintf("Impossible\n");return 0;
}

POJ - 2513 Colored Sticks(字典树+并查集+欧拉回路)相关推荐

  1. poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)

    题目:http://poj.org/problem?id=2513 参考博客:http://blog.csdn.net/lyy289065406/article/details/6647445 htt ...

  2. 欧拉路径 之 poj 2513 Colored Sticks

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

  3. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  4. POJ-2513 Colored Sticks 字典树,欧拉回路

    这题用map就超时了,所以用字典树来优化,第一次写静态的,现在都不习惯用指针了. 由于这里不要回到源点,所以不许要所有点的度都为偶数,零个或者两个均可,图也必须是连通的. 代码如下: #include ...

  5. POJ 2513 Colored Sticks

    POJ_2513 这个题目实际上要求木棍能够组成一个欧拉道路即可.为了练字典树所以用字典树写的,当然,这个题目用哈希做也可以. 需要注意的是由于木棍有25W,因此不同的顶点最多有50W,所以存储图顶点 ...

  6. poj 2513 Colored Sticks

    // 判断图是否联通 在连通的基础上还要判断是否存在欧拉通路// 判断连通就并查集了 判断是否存在欧拉通路: 点度数为数的点 ==1 >=3就是不存在的 其它是存在的// 我开始用 map 判重 ...

  7. POJ 1703 Find them, Catch them(并查集高级应用)

    POJ 1703 Find them, Catch them(并查集高级应用) 手动博客搬家:本文发表于20170805 21:25:49, 原地址https://blog.csdn.net/sunc ...

  8. HDU 1512 Monkey King 左偏树 + 并查集

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意:有n个猴子,一开始每个猴子只认识自己.每个猴子有一个力量值,力量值越大表示这个猴子打架越厉害. ...

  9. 可持久化线段树【主席树】可持久化并查集【主席树+并查集】

    笼统的主席树原理 众所周知, 主席树是可以持久化的, 换言之你能知道你所维护信息的所有历史状态. 主席树是这样做的: 1. 首先建一颗朴素的线段树,代表初始状态 (下图黑色) , 也就是第0次操作后的 ...

最新文章

  1. python开发的优秀界面-tkinter python(图形开发界面)
  2. java中对象模型与数据库中的关系模型
  3. (三)HTML 规范
  4. 100 个网络基础知识 看完成半个网络高手
  5. Linux教学的误区
  6. 百度网盘下载神器度盘下载器
  7. php拼音首拼,php 实现 汉字转拼音
  8. 使用Goodcrawler爬取700集的柯南
  9. 用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)...
  10. 特征级融合_自动驾驶系统入门(七)- 多传感器信息融合
  11. SWOT、6W2H、WBS、时间管理……
  12. 改进的LCS算法的应用
  13. 工信部python证书多少钱_python requests SSL证书问题
  14. 面试中C语言常问问题(含答案)
  15. mysql相关的dll_libmySQL.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  16. 电信 NB-IoT无缝对接阿里云IoT 物联网平台
  17. mt4下载正版官网下载(如何分辨真假MT4软件)
  18. 万能通用的各大网站(全民简历、简历本等) 简历模板 -- 免费下载方法
  19. 服务器cpu能修复吗,有关服务器cpu使用100%常见的解决方法
  20. 棋牌游戏开发--如何选择棋牌开发商

热门文章

  1. Canal数据同步策略
  2. Spring MVC 源码-初始化阶段
  3. ActiveMQ入门-ActiveMQ跟SpringBoot整合发送接收Topic
  4. 函数式接口作为方法的返回值
  5. 分布式文件系统研究-什么是文件系统
  6. 方法入门_方法的调用
  7. hystrix服务降级
  8. 登录案例_BeanUtils基本使用
  9. Servlet_生命周期详解
  10. exi 虚拟服务器,图文教程:如何在ESXi主机上部署VMware Tools 10