题目链接:

https://vjudge.net/problem/POJ-2513

题目大意:

给一些木棍,两端都有颜色,只有两根对应的端点颜色相同才能相接,问能不能把它们接成一根木棍

解题思路:

题意不难,典型的无向图判断是否存在欧拉通路或回路的问题。

1、欧拉通路或回路的判定条件是图联通,并且度数为奇数的点只有两个或者0个

2、颜色多,输入的字符串多,需要用字典树存储,给字符串标号用字典树标记

3、点数多,用并查集判断连通性。

第一次WA:没由开is_word标记,写成了前缀判断,此处应该是单词判断

第二次WA:判断连通的时候简单地用p[i] == i;满足该条件的数目等于1来判断连通性,但是此题输入的图可能很复杂,应该判断是否所有点的根节点是同一个点这样进行判断。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<cmath>
#include<algorithm>
#include<vector>
#include<sstream>
#define lowbot(i) (i&(-i))
using namespace std; const int maxn = 1e6 + ;
int tree[maxn][];
//字典树tree[u][v]表示编号为u的节点的下一个字母为v连接的节点的编号
int idx(char c){ return c - 'a'; }//可以写成宏定义
int tot = ;//根节点编号为1
bool is_word[maxn];
int sum[maxn];
int cnt = ;//cnt
int Insert(char s[], int u)//u表示根节点
//插入字符串s
{
for(int i = ; s[i]; i++)
{
int c = idx(s[i]);
if(!tree[u][c])
tree[u][c] = ++tot;
u = tree[u][c];
}
sum[u] = ++cnt;
is_word[u] = ;//标记单词结尾
return sum[u];
} int ID(char s[], int u)//返回单词s的编号
{
for(int i = ; s[i]; i++)
{
int c = idx(s[i]);
if(!tree[u][c])//还没有编号
return Insert(s, );
u = tree[u][c];
}
if(!is_word[u])//是前缀但是并不是单词
{
return Insert(s, );
}
return sum[u];
}
int p[maxn];//并查集
int d[maxn];//记录每个点度数之和
int Find(int x)
{
return x == p[x] ? x : p[x] = Find(p[x]);
}
int main()
{
for(int i = ; i < maxn; i++)
{
p[i] = i;
}
char s1[], s2[];
int u, v, x, y;
while(scanf("%s%s", s1, s2) != EOF)
{
u = ID(s1, );
v = ID(s2, );
//cout<<u<<" "<<v<<endl;
x = Find(u);
y = Find(v);
if(x != y)p[x] = y;
d[u]++;
d[v]++;
}
int flag = , flag1 = ;
//flag判断连通性
//flag1记录奇点度数的点的数目
int t = Find();
if(d[] & )flag1++;
for(int i = ; i <= cnt; i++)
{
if(Find(i) != t){flag = ;break;}
if(d[i] & )flag1++;
}
if(flag && (flag1 == || flag1 == ))
printf("Possible\n");
else printf("Impossible\n");
return ;
}

POJ-2513 Colored Sticks---欧拉回路+并查集+字典树的更多相关文章

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

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

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

    题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...

  3. poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)

    题目链接:poj 2513 Colored Sticks 题目大意:有N个木棍,每根木棍两端被涂上颜色.如今给定每一个木棍两端的颜色.不同木棍之间拼接须要颜色同样的 端才干够.问最后是否能将N个木棍拼 ...

  4. [欧拉] poj 2513 Colored Sticks

    主题链接: http://poj.org/problem? id=2513 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Tota ...

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

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

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

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

  7. poj 2513 Colored Sticks trie树+欧拉图+并查集

    点击打开链接 Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 27955   Accepted ...

  8. poj 2513 Colored Sticks (trie树+并查集+欧拉路)

    Colored Sticks Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 40043   Accepted: 10406 ...

  9. POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)

    下面两个写得很清楚了,就不在赘述. http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.htmlhttp://www.cnblogs.com/lyy2890 ...

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

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

随机推荐

  1. linux面试题:删除一个目录下的所有文件,但保留一个指定文件

    面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10 十个文件 [root@oldboy xx]# touch ...

  2. vue.js依赖安装和引入

    在项目开发过程中我们要安需安装依赖,安装方法 1.可以在项目的package.json文件中的dependencies写入依赖名称和依赖版本,然后打开命令行工具进入项目运行vue install安装 ...

  3. maya卸载不干净

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  4. Unity 为什么有时候播放音乐(音效)会没有声音

    1.问题描述 昨晚,我遇到的情况如下: 1.MainCamera里有Audio Source,并且在循环播放音乐 2.在其他的GameObject中也新增一个Audio Source,在某个时机播放音 ...

  5. 前台js escape及后台C# Server.UrlEncode 对QueryString传参的含~!@#$%^&*等特殊字符的处理

    通常情况下,我们在List列表页面,会包含Create,Edit,Delete等操作按钮, 而通常的处理是: Create按钮跳转到DataCreate.aspx Edit按钮跳转到DataEdit. ...

  6. (转)stty 命令说明及使用讲解

    stty 命令说明及使用讲解     UNIX系统的命令很多,但是巧妙使用命令的方法更多.随着经验的积累和观察学习其他用户的实践,我们也可学会解决特殊问题的方法.这里谈谈自己使用UNIX系统中stty ...

  7. [PHP]AES加密----PHP服务端和Android客户端

    本文采取128位AES-CBC模式加密和解密 1.首先对服务端安装mcrypt: sudo apt-get install php5-mcrypt php5-dev sudo php5enmod mc ...

  8. php-fpm 进程在云服务器cpu分配不均匀

    8核的云服务器,开了200个php-fpm进程,用top命令查看  大部分进程都在cpu 0 上跑着,导致其他cpu 负载很低,cpu分配不均匀: 使用shell 解决问题: 列出所有php-fpm ...

  9. [转]png图片压缩大小但是不改变透明部分

    降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...

  10. Win2D 官方文章系列翻译 - 与 Direct2D 互操作

    本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-interop-with-direct2d/ Win2D 作为 Direct2D 的上层实现,支持与其进行双向 ...