POJ2513-Colored Sticks
/*
思路:类似图论中“一笔画”问题,两根木棒的相连接的端点是一样的颜色,(a,b)--(b,c)--(c, d)....
方法:trie树+并查集, 利用trie树建立字符串和某一个节点的映射,并将这些和字符串构成映射的节点建成图, 用并查集判断图的连通
*/
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #define N 2500005*2
5 using namespace std;
6 int f[N];
7 int indgr[N];
8 int trie[N][26];
9 int nodeNum, pre, cnt, oddDgr, root;
10 int getFather(int x)//并查集寻找父亲节点,压缩路径
11 {
12 return x == f[x] ? x : f[x]=getFather(f[x]);
13 }
14
15 void Union(int a, int b)//并查集的合并
16 {
17 int fa=getFather(a), fb=getFather(b);
18 if(fa!=fb)
19 f[fa]=fb;
20 }
21
22 int main()
23 {
24 char color[15];
25 int i;
26 for(i=0; i<N; ++i)
27 f[i]=i;
28 while(scanf("%s", color)!=EOF)
29 {
30 cnt++;
31 int cur=0, L=strlen(color);
32 for(i=0; i<L; ++i)
33 {
34 int k=color[i]-'a';
35 if(!trie[cur][k])
36 trie[cur][k]=++nodeNum;
37 cur=trie[cur][k];
38 }
39 ++indgr[cur];
40 if(cnt%2) pre=cur;
41 else
42 Union(pre, cur);
43 }
44 for(i=0; i<=nodeNum; ++i)
45 {
46 if(indgr[i]&1) ++oddDgr;
47 if(indgr[i] && f[i]==i) ++root;
48 if(oddDgr>2 || root>1) break;
49 }
50 if((oddDgr==0 || oddDgr==2) && root==1 || oddDgr==0 && root==0)//注意空树的情况下是输出Impossible, 开始就是错在了这里
51 printf("Possible\n");
52 else printf("Impossible\n");
53 return 0;
54 }
POJ2513-Colored Sticks的更多相关文章
- POJ2513——Colored Sticks(Trie树+欧拉回路+并查集)
Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...
- POJ2513 Colored Sticks(Trie+欧拉回路)
Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some ...
- POJ2513:Colored Sticks(字典树+欧拉路径+并查集)
http://poj.org/problem?id=2513 Description You are given a bunch of wooden sticks. Each endpoint of ...
- POJ2513 Colored Sticks(欧拉)
题目链接. 题目大意: 给很多木棍,两端被涂了颜色.任意两根木棍的相同颜色处可以拼接在一起,问有没有可能将所有的木棍都连起来,成一条直线? 分析: 考点,欧拉道路. 将一根木棍看成一条边,两端的颜色看 ...
- poj2513 Colored Sticks —— 字典树 + 并查集 + 欧拉回路
题目链接:http://poj.org/problem?id=2513 题解:通过这题了解了字典树.用字典树存储颜色,并给颜色编上序号.这题为典型的欧拉回路问题:将每种颜色当成一个点.首先通过并查集判 ...
- poj 2513 Colored Sticks trie树+欧拉图+并查集
点击打开链接 Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27955 Accepted ...
- POJ 2513 Colored Sticks
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 28036 Accepted: 7428 ...
- 周赛-Colored Sticks 分类: 比赛 2015-08-02 09:33 7人阅读 评论(0) 收藏
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 32423 Accepted: 8556 Desc ...
- [欧拉] poj 2513 Colored Sticks
主题链接: http://poj.org/problem? id=2513 Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Tota ...
- poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)
题目链接:poj 2513 Colored Sticks 题目大意:有N个木棍,每根木棍两端被涂上颜色.如今给定每一个木棍两端的颜色.不同木棍之间拼接须要颜色同样的 端才干够.问最后是否能将N个木棍拼 ...
随机推荐
- 【转】Microsoft .NET Framework 3.5 sp1 安装速度慢,快速离线安装的方法
1.到官网上下载3.5SP1的完整安装包.2.下载完成后,命令行下运行dotnetfx35.exe/x,解压到一个目录(如D:"),此时会生成一个D:"wcu目录3.进入解压目录下 ...
- 反编译apk时遇到的问题
第一次尝试反编译的时候遇到如下问题:Input file (ganzhou) was not found or was not readable 百度之后说是apktool版本2.0以上,编译命令变了 ...
- redis 下载及使用
redis 官网下载地址:http://redis.io/ E:\工作软件\新建文件夹\redis64-2.8.19 redis-server.exe 执行该命令 当前已启动 端口号:6379 r ...
- 为什么要用elasticsearch-理解加深中
首先的概念 基于Lucene 分布式实时文件存储 实时的分析搜索引擎 能达到实时搜索 优势的地方 1.横向可扩展性:只需要增加一台服务器,做一点儿配置,启动一下ES进程就可以并入集群: 2.分片机制提 ...
- 自定义 TableViewCell 的分割线
刚开始自定义 tableViewCell 的时候,用的是直接在 cell 上加一张 imageView 的方法,如果在点击 cell 的时候有页面的跳转,这样做没什么问题,但是,如果在点击 cell ...
- Ubuntu下Android Studio环境搭建
1.JDK安装 a.准备 由于AS(Android Studio)不支持openjdk,需要另行下载oracle jdk,同时官网指出对于64位linux系统,为了能在其上运行32位程序,需要安装一些 ...
- python安装完毕后,提示找不到ssl模块的解决步骤
转载自 醇酒醉影 python安装完毕后,提示找不到ssl模块: [root@localhost ~]# python2.7.5 Python 2.7.5 (default, Jun 3 2013, ...
- linux开启FTP以及添加用户配置权限,只允许访问自身目录,不能跳转根目录
1.切换到root用户 2.查看是否安装vsftp,我这个是已经安装的. [root@localhost vsftpd]# rpm -qa |grep vsftpd vsftpd--.el7_2.x8 ...
- 深入浅出 妙用Javascript中apply、call、bind
apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...
- Android控件之Notification
Android通知就是让设备在屏幕最顶上那栏里面显示图标,当滑下通知栏之后可以看到列表状的通知选项,有些是"通知"类型的,有些是"正在运行"类型的," ...