poj 2513 欧拉回路+并查集推断是否联通+Trie树
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树的更多相关文章
- [学习笔记]可持久化数据结构——数组、并查集、平衡树、Trie树
可持久化:支持查询历史版本和在历史版本上修改 可持久化数组 主席树做即可. [模板]可持久化数组(可持久化线段树/平衡树) 可持久化并查集 可持久化并查集 主席树做即可. 要按秩合并.(路径压缩每次建 ...
- POJ 2513 Colored Sticks (欧拉回路+并查集+字典树)
题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...
- poj 1386 Play on Words门上的单词【欧拉回路&&并查集】
题目链接:http://poj.org/problem?id=1386 题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词就可以相连,判断给出的n个单词是否能够一个接着一个全 ...
- HDU 1116 || POJ 1386 || ZOJ 2016 Play on Words (欧拉回路+并查集)
题目链接 题意 : 有很多门,每个门上有很多磁盘,每个盘上一个单词,必须重新排列磁盘使得每个单词的第一个字母与前一个单词的最后一个字母相同.给你一组单词问能不能排成上述形式. 思路 :把每个单词看成有 ...
- Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash
题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点 或者 ...
- ACM: FZU 2112 Tickets - 欧拉回路 - 并查集
FZU 2112 Tickets Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u P ...
- poj 2524 (并查集)
http://poj.org/problem?id=2524 题意:在一所学校里面的人,都有宗教信仰,不过他们的宗教信仰有可能相同有可能不同,但你又不能直接去问他们,但你可以问他们和谁是同一个宗教.通 ...
- POJ2513——Colored Sticks(Trie树+欧拉回路+并查集)
Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...
- nyist 42 一笔画 (欧拉回路 + 并查集)
nyoj42 分析: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径. 若该路径是一个圈,则称为欧拉(Euler)回路. 具有欧拉回路的图称为欧拉图(简称E图).具有欧拉路 ...
随机推荐
- mysql linux查看配置文件my.cnf位置
原文:mysql linux查看配置文件my.cnf位置 命令: mysql --help | grep 'Default options' -A 1
- SpringBoot+Maven聚合多项目打包成jar
已我最近自己在玩的一个DEMO为例 taosir为pom.xml,其他子项目均为其modules,且为jar项目 eureka为注册中心.workflow为提供者.entrance为调用方 entra ...
- 华硕VX50V开机老是进入bios
问题:华硕VX50V开机老是进入bios 如图: 解决办法: 1.将 Boot 中的--->> Lunch CSM ---->>设置为 -->> ena ...
- PatentTips - Sleep state mechanism for virtual multithreading
BACKGROUND The present disclosure relates generally to information processing systems and, more spec ...
- SQL SERVER-约束
NOT NULL - 指示某列不能存储 NULL 值. UNIQUE - 保证某列的每行必须有唯一的值. PRIMARY KEY - NOT NULL 和 UNIQUE 的结合.确保某列(或两个列多个 ...
- leetCode(24):Binary Search Tree Iterator
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...
- 纯文本中识别URI地址并转换成HTML
问题 有一段纯文本text, 欲将其插入DOM节点div中. text中可能有超链接, 邮件地址等. 假设有, 识别之. 分析 假设仅仅是纯文本, 插入div中, 仅仅要将div.innerText设 ...
- Cacti使用安装具体解释
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监測图形分析工具.Cacti是通过 snmpget来获取数据.使用 RRDtool绘绘图形,而且你全然能够不须要了解RRD ...
- HDU5411CRB and Puzzle(矩阵高速幂)
题目链接:传送门 题意: 一个图有n个顶点.已知邻接矩阵.问点能够反复用长度小于m的路径有多少. 分析: 首先我们知道了邻接矩阵A.那么A^k代表的就是长度为k的路径有多少个. 那么结果就是A^0+A ...
- JAVA设计模式之【外观模式】
通过引入一个外观角色来简化客户端与子系统之间的交互. 顾客无需直接和茶叶.茶具.开水等交互,整个泡茶过程由服务员来完成,顾客只需与服务员交互即可. 通过引入一个外观角色可以降低原有系统的复杂度,同时降 ...