Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash
题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种
方法可以使得所以棒子连在一起
思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点 或者只有2个奇度顶点 同时要连通 。关键在于给颜色hash和
判断连通性 hash用字典树 连通用并查集
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=+;
struct Trie{
int ch[maxn][];
int size;
int num[maxn];
int number;
void init(){
memset(ch,,sizeof(ch));
size=;
number=;
memset(num,,sizeof(num));
}
void insert(char*s){
int rc=,i=;
for(;s[i]!='\0';i++){
int id=s[i]-'a';
if(ch[rc][id]==){
ch[rc][id]=size++;
}
rc=ch[rc][id];
}
if(num[rc]==)num[rc]=number++;
}
int find(char*s){
int rc=,i=;
for(;s[i]!='\0';i++){
int id=s[i]-'a';
if(ch[rc][id]==){
return -;
}
// if(s[i+1]=='\0')return ch[rc][id];
rc=ch[rc][id];
}
return num[rc];
}
}trie;
int father[maxn];
int Find(int x){
return father[x]=father[x]==x?x:Find(father[x]);
}
void merge(int x,int y){
x=Find(x);
y=Find(y);
if(x!=y)
father[x]=y;
}
char s1[],s2[];
int dgree[maxn];
int main(){
trie.init();
int flag=;
for(int i=;i<=maxn;i++)father[i]=i;
int maxnum=;
while(scanf("%s%s",s1,s2)==){
trie.insert(s1);trie.insert(s2);
int x=trie.find(s1);
int y=trie.find(s2);
dgree[x]++;
dgree[y]++;
maxnum=max(maxnum,x);
maxnum=max(maxnum,y);
merge(x,y);
}
int z=;
for(int i=;i<=maxnum;i++){
if(dgree[i]%)z++;
}
flag=Find();
int ok=;
for(int i=;i<=maxnum;i++){
if(flag!=Find(i)){
// cout<<i<<" "<<Find(i)<<" "<<flag<<endl;
ok=;break;
}
}
// cout<<ok<<" "<<z<<endl;
if((ok)&&(z==||z==))printf("Possible\n");
else printf("Impossible"); return ;
}
Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash的更多相关文章
- POJ 2513 无向欧拉通路+字典树+并查集
题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...
- NYOJ--42--dfs水过||并查集+欧拉通路--一笔画问题
dfs水过: /* Name: NYOJ--42--一笔画问题 Author: shen_渊 Date: 18/04/17 15:22 Description: 这个题用并查集做,更好.在练搜索,试试 ...
- POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)
下面两个写得很清楚了,就不在赘述. http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.htmlhttp://www.cnblogs.com/lyy2890 ...
- POJ 2513 Colored Sticks (欧拉回路+并查集+字典树)
题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...
- Colored Sticks - poj2513(trie + 并查集)
问题便转化为:给定一个图,是否存在“一笔画”经过涂中每一点,以及经过每一边一次.这样就是求图中是否存在欧拉路Euler-Path.由图论知识可以知道,无向图存在欧拉路的充要条件为:① 图是连通的:② ...
- Colored Sticks POJ - 2513(trie树欧拉路)
题意: 就是无向图欧拉路 解析: 不能用map..超时 在判断是否只有一个联通的时候,我比较喜欢用set,但也不能用set,会超时,反正不能用stl emm 用trie树来编号就好了 #include ...
- poj 2513 欧拉回路+并查集推断是否联通+Trie树
http://poj.org/problem? id=2513 最初看到 第一感觉---map 一看250000的数据量 果断放弃 然后记得曾经看过.trie取代map.尤其当数据量特别大的时候 学 ...
- POJ2513Colored Sticks(欧拉通路)(字典树)(并查集)
Colored Sticks Time Limit: 5000MS Memory ...
- poj 2513 连接火柴 字典树+欧拉通路 好题
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27134 Accepted: 7186 ...
随机推荐
- C# 实现实时网速
前言 最近参加了一个项目,所以写博客的时间就少了,项目中有一个功能就是在窗体上显示实时网速,用了半天的时间写了出来,想想今天时间蛮充足,就把它分享到博客上吧. 项目展示 项目核心代码: private ...
- 分享vs低版本开发的项目到VS高版本时遇到的4个小问题解决之记录
分享vs低版本开发的项目到VS高版本时遇到的4个小问题解决之记录 原文首发: http://anforen.com/wp/2017/08/extensionattribute_compilerserv ...
- 一篇 JPA 总结
概述 下面是 JDBC 在 Java 应用和数据库之间的位置,充当着一个中间者,供 Java 应用程序访问所有类别的数据库,建立一个标准 JPA 如同 JDBC 一样,为 Java 应用程序使用 OR ...
- 如何解决 Windows 实例出现身份验证错误及更正 CredSSP
阿里云上的ESC赠送1核2G服务器,安装windows server 2016 Datacenter 3389远程登录时提示错误信息,参考阿里文档:https://help.aliyun.com/kn ...
- Spring集成Quarz开发环境搭建
第一步,搭建Spring相关的环境,参照:http://www.cnblogs.com/dyh004/p/4645572.html 第二步,下载Quartz相关的压缩文件,解压,下载地址:http:/ ...
- Cat8 八类网线是什么?与Cat5、Cat6、Cat7网线的区别?
若您身处于网络通信行业,相信您应该了解一些以太网线缆,比如说超五类网线.六类网线和七类网线等等.但是您知道Cat8 八类网线 是什么吗?它与五类网线.六类/超六类网线及七类/超七类网线有着怎么样的区别 ...
- Python-正则复习-56
# 正则表达式# 字符组 [字符]# 元字符 # \w \d \s # \W \D \S # . 除了换行符以外的任意字符 # \n \t # \b # ^ $ 匹配字符串的开始和结束 # () 分组 ...
- Python_迭代器_35
迭代器 # l = [1,2,3]# 索引# 循环 for# for i in l:# i## for k in dic:# pass #可以被for循环的# list# dic# str# set# ...
- Python常用内建方法:__init__,__new__,__class__的理解
python中所有类都是继承自object, 而object提供了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性.可以使用dir()函数可以查看,虽然python提供 ...
- C. Polycarp Restores Permutation
链接 [https://codeforces.com/contest/1141/problem/C] 题意 qi=pi+1−pi.给你qi让你恢复pi 每个pi都不一样 分析 就是数学吧 a1 +(a ...