题目大意:

有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现

这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧拉通路的判断,但是map效率太低,超时了

网上看了一遍发现必须得用效率更高的字典树对每个不同的颜色进行赋值

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 500020
int fa[N],degree[N],k=;
char str1[],str2[];
struct Node{
int id,cnt;
Node *next[];
Node(){
id=-;
for(int i=;i<;i++) next[i]=NULL;
}
};
Node *root=new Node();
int Insert(char *str){
Node *p=root;
for(int i=;i<strlen(str);i++){
if(p->next[str[i]-'a']==NULL) {Node *q=new Node();p->next[str[i]-'a']=q;}
p=p->next[str[i]-'a'];
}
if(p->id==-) p->id=++k;
return p->id;
}
int find_head(int x)
{
int u=x;
while(x!=fa[x]) x=fa[x];
fa[u]=x;
return x;
}
int Union(int x,int y)
{
int fa_x=find_head(x);
int fa_y=find_head(y);
if(fa_x!=fa_y) fa[fa_x]=fa_y;
return fa_y;
}
int main()
{
int tmp;
for(int i=;i<=;i++) fa[i]=i;
// cout<<in[15]<<' '<<out[20]<<' '<<visit[30]<<endl;
while(scanf("%s",str1)!=EOF){
//if(str1[0]=='0') break;
scanf("%s",str2);
int a=Insert(str1);
int b=Insert(str2);
degree[a]++,degree[b]++;
//cout<<a<<' '<<b<<endl;
tmp=Union(a,b);
}
bool flag=;
for(int i=;i<=k;i++){
if(find_head(i)!=tmp){
flag=false;
break;
}
}
if(!flag) puts("Impossible");
else{
int t=;
for(int i=;i<=k;i++){
if(degree[i]%==) t++;
}
if(t>) puts("Impossible");
else puts("Possible");
}
return ;
}

POJ 2513 无向欧拉通路+字典树+并查集的更多相关文章

  1. Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash

    题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点   或者 ...

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

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

  3. POJ2513Colored Sticks(欧拉通路)(字典树)(并查集)

                                                             Colored Sticks Time Limit: 5000MS   Memory ...

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

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

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

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

  6. POJ 2513 字典树+并查集+欧拉路径

    Description: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 解题思路: 可以用图论中欧拉路的知识来解这道题,首先可以把木 ...

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

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

  8. poj 2513 连接火柴 字典树+欧拉通路 好题

    Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 27134   Accepted: 7186 ...

  9. poj2513- Colored Sticks 字典树+欧拉通路判断

    题目链接:http://poj.org/problem?id=2513 思路很容易想到就是判断欧拉通路 预处理时用字典树将每个单词和数字对应即可 刚开始在并查集处理的时候出错了 代码: #includ ...

随机推荐

  1. 17984 FFF团的怒火

    17984 FFF团的怒火 该题有题解 时间限制:1000MS  内存限制:65535K提交次数:55 通过次数:3 收入:3 题型: 编程题   语言: G++;GCC;VC;JAVA Descri ...

  2. 在nginx上部署vue项目(history模式)--demo实列;

    在很早之前,我写了一篇 关于 在nginx上部署vue项目(history模式) 但是讲的都是理论,所以今天做个demo来实战下.有必要让大家更好的理解,我发现搜索这类似的问题还是挺多的,因此在写一篇 ...

  3. PHP多图片上传类推荐

    多文件上传是PHP中的一个基础应用,反正PHPer都会遇到的问题,现在就介绍一个功能完善.强大的多文件上传类给大家吧,能用上这个类的地方会很多. <?php class Upload{ var ...

  4. Android Learning Note -- AsyncTask浅尝

    AsyncTask 实现原理 AsyncTask是Android提供的轻量级异步类,可以直接继承AsyncTask在类中实现异步操作,并提供接口反馈当前的异步执行程度(通过接口实现UI进度更新),最后 ...

  5. win驱动安装记录

    工具:devcon64.exe 安装/更新/删除等记录:c:\windows\inf\setupapi.dev.log

  6. TensorFlow 安装 Win10 Python+GPU

    前叙:有灵魂的程序都是每一个程序员的最终目标.TensorFlow了解下? 打算花几个月学机器学习,TensorFlow是很好的选择,折腾了会环境,略有心得分享下. 环境:win10 Python:3 ...

  7. 一个简单的139邮箱登录脚本--->java-selenium

    import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebE ...

  8. 程序员面试系列之Java单例模式的攻击与防御

    我写的程序员面试系列 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java ...

  9. 如何用Chrome自带的截屏功能截取超过一个屏幕的网页

    提升程序员工作效率的工具/技巧推荐系列 推荐一个功能强大的文件搜索工具SearchMyFiles 介绍一个好用的免费流程图和UML绘制软件-Diagram Designer 介绍Windows任务管理 ...

  10. uva1628 Pizza Delivery

    fixing great wall 的变形dp(i,j,k,p)不考虑i-j的客人,还要送k个人,目前位置在p起点i和总数量k都要枚举dp(i,j,k,p)=max(dp(m,j,k-1,p)+val ...