http://poj.org/problem?

id=2513

最初看到 第一感觉---map  一看250000的数据量 果断放弃

然后记得曾经看过。trie取代map。尤其当数据量特别大的时候

学到了:

1、Trie取代map的思想,能够在单词结尾的tree[i][tk]  这个i作为字符串相应的int值 。当然这个int值也能够用于建立并查集

2、接上。通过并查集推断。全部的点在同一个集合图就是联通的,否则不联通,注意tree[i][tk]>0 表示是单词结尾。

    x=Find(x);//这句没有的时候调试了几下。

。。
int flag=1;
for(int i=1;i<top;i++)
{
if(tree[i][tk] && x!=Find(i))
{
flag=0;
break;
}
if(tree[i][tk]%2)cnt++;
}

注意,并查集并不保证全部在同一个集合的点的father同样,所以还是要通过Find(x)==Find(y)推断是不是在同一个集合,而不能father相等推断。

3、无向图欧拉通路存在的判定:

a、联通,并查集去做

b、度数为奇数的个数为0或2---------------0 无向图存在欧拉回路,2  无向图存在欧拉通路 是半欧拉图

#include<cstdio>
#include<cstring>
#include <string>
#include <map>
#include <iostream>
#include <cmath>
using namespace std;
#define INF 10000 const int tk=26,tb='a';
const int N = 5000000+1000;//2500000+1000;
//int d[N];
int tree[N][tk+1],top,n;
int father[N],pos[N],scnt;
char pat1[15],pat2[15];
void init()
{
top=1;
scnt=n=0;
memset(tree[0],0,sizeof(tree[0]));
//makeset
for(int i=0;i<N;i++)
father[i]=i;
} int Insert(char *s, int Rank=0)
{
int rt,nxt;
for(rt=0; *s; rt=nxt,++s)
{
nxt=tree[rt][*s-tb];
if(!nxt)
{
nxt=tree[rt][*s-tb]=top;
memset(tree[top],0,sizeof(tree[top]));
top++;
}
}
tree[rt][tk]++;
return rt;
}
int Find(int x)
{
if(x!=father[x])father[x]=Find(father[x]);
return father[x];
}
void Union(int x, int y)
{
x=Find(x),y=Find(y);
if(x==y)return;
father[y]=x;
}
int main()
{
//freopen("poj2513.txt","r",stdin);
init();
int cnt=0,x,y;
while(scanf("%s%s",pat1,pat2)!=EOF)
{
x=Insert(pat1);
y=Insert(pat2);
Union(x,y);
}
x=Find(x);//这句没有的时候调试了几下。。。
int flag=1;
for(int i=1;i<top;i++)
{
if(tree[i][tk] && x!=Find(i))
{
flag=0;
break;
}
if(tree[i][tk]%2)cnt++;
}
if(!(
cnt==2
|| cnt == 0)
)flag=0;
if(flag)printf("Possible\n");
else printf("Impossible\n");
return 0;
}

poj 2513 欧拉回路+并查集推断是否联通+Trie树的更多相关文章

  1. [学习笔记]可持久化数据结构——数组、并查集、平衡树、Trie树

    可持久化:支持查询历史版本和在历史版本上修改 可持久化数组 主席树做即可. [模板]可持久化数组(可持久化线段树/平衡树) 可持久化并查集 可持久化并查集 主席树做即可. 要按秩合并.(路径压缩每次建 ...

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

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

  3. poj 1386 Play on Words门上的单词【欧拉回路&&并查集】

    题目链接:http://poj.org/problem?id=1386 题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词就可以相连,判断给出的n个单词是否能够一个接着一个全 ...

  4. HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)

    题目链接 题意 : 有很多门,每个门上有很多磁盘,每个盘上一个单词,必须重新排列磁盘使得每个单词的第一个字母与前一个单词的最后一个字母相同.给你一组单词问能不能排成上述形式. 思路 :把每个单词看成有 ...

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

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

  6. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

  7. poj 2524 (并查集)

    http://poj.org/problem?id=2524 题意:在一所学校里面的人,都有宗教信仰,不过他们的宗教信仰有可能相同有可能不同,但你又不能直接去问他们,但你可以问他们和谁是同一个宗教.通 ...

  8. POJ2513——Colored Sticks(Trie树+欧拉回路+并查集)

    Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...

  9. nyist 42 一笔画 (欧拉回路 + 并查集)

    nyoj42 分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径. 若该路径是一个圈,则称为欧拉(Euler)回路. 具有欧拉回路的图称为欧拉图(简称E图).具有欧拉路 ...

随机推荐

  1. ZJU 2676 Network Wars

    Network Wars Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...

  2. LaTeX 基本的公式符号命令

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50240237 下面列出一些基本的LaT ...

  3. android canvas 画图笔记

    android canvas 画图笔记 1.PathEffect类 画虚线 Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); p.setStyle(Paint.S ...

  4. 自己动手写shell命令之more

    unix下more命令的简单实现: #include <stdio.h> #define PAGELEN 24 #define LINELEN 512 int do_more(FILE * ...

  5. RedHat6.5 安装OpenStack all in one-RDO方式

    OpenStack是一个开源的云平台.由各个组件协同工作,安装非常复杂. RedHat有个关于Openstack的项目RDO,能够简化安装过程,可是假设真按RDO所说的三步去安装,发现安装过程中还是有 ...

  6. Brute force Attack

    1 Introduction A common threat that webdevelopers face is a password-guessing attack known as a brut ...

  7. linux数据库升级

    转自:老左博客:http://www.laozuo.org/6145.html 老左今天有在帮朋友的博客搬迁到另外一台VPS主机环境,其环境采用的是LLSMP架构的,原先的服务器采用的是LNMP网站环 ...

  8. Go语言结构体转json的坑

    Go语言结构体转json的坑 标签(空格分隔): go json.Marshal() JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出, ...

  9. Java8 方法引用与构造器引用,数组引用

    package java_8; import org.junit.Test; import java.io.PrintStream; import java.util.Comparator; impo ...

  10. ubuntu修改顶栏颜色

    title: ubuntu修改顶栏颜色 toc: false date: 2018-09-29 19:14:01 categories: methods tags: Ubuntu 编辑shell主题的 ...