poj 2513 Colored Sticks (trie 树)
题意:给定一些木棒。木棒两端都涂上颜色,不同木棒相接的一边必须是
同样的颜色。求能否将木棒首尾相接。连成一条直线.
分析:能够用欧拉路的思想来解,将木棒的每一端都看成一个结点
由图论知识能够知道,无向图存在欧拉路的充要条件为:
① 图是连通的。
② 全部节点的度为偶数,或者有且仅仅有两个度为奇数的结点。
图的连通性能够用并查集,由于数据比較大,所以用并查集时要压缩路径,
全部节点的度(入度和出度的和)用数组记录就好
可是25w个木棒,有50w个结点,要怎么存呢,假设用数组,每次得查找,
效率特别低,这样就能够用trie树存储数据,用空间换取时间
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 500000
typedef struct stu
{
int id,flag; //id为结点的编号。flag标记改颜色是否存在
struct stu *next[26];
}node;
int num=1,f[M+5],d[M+5];
node* creat_node() //创建结点并初始化
{
node *p=(node*)malloc(sizeof(node));
p->id=p->flag=0;
memset(p->next,0,sizeof(p->next));
return p;
}
int trie_insert(node *p,char *s) //插入颜色结点。并返回其编号
{
int i;
while(*s!='\0'){
i=*s-'a';
if(p->next[i]==NULL)
p->next[i]=creat_node();
p=p->next[i];
s++;
}
if(!p->flag){
p->flag=1;
p->id=num++;
}
return p->id;
}
int find(int x) //并查集查找,并压缩路径
{
if(x!=f[x])
f[x]=find(f[x]);
return f[x];
}
void mix(int a,int b) //并查集的合并
{
a=find(a);
b=find(b);
if(a!=b)
f[a]=b;
}
int main()
{
int i,j,n,m,flag=1;
node *root=NULL;
char s1[15],s2[15];
root=creat_node(); //创建根结点
for(i=1;i<=M;i++){ //父节点以及度的初始化
f[i]=i;
d[i]=0;
}
while(scanf("%s%s",s1,s2)!=EOF){
i=trie_insert(root,s1);
j=trie_insert(root,s2);
mix(i,j);
d[i]++;
d[j]++;
}
m=n=0;
for(i=1;i<num&&flag;i++){
if(d[i]%2)
n++; //记录度为奇数的结点
if(n>2)
flag=0;
if(f[i]==i) //记录公共祖先结点的个数
m++;
if(m>1)
flag=0;
}
if(flag)
printf("Possible\n");
else
printf("Impossible\n");
return 0;
}
poj 2513 Colored Sticks (trie 树)的更多相关文章
- poj 2513 Colored Sticks trie树+欧拉图+并查集
点击打开链接 Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27955 Accepted ...
- poj 2513 Colored Sticks (trie树+并查集+欧拉路)
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 40043 Accepted: 10406 ...
- poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)
题目:http://poj.org/problem?id=2513 参考博客:http://blog.csdn.net/lyy289065406/article/details/6647445 htt ...
- POJ 2513 Colored Sticks 字典树、并查集、欧拉通路
Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some ...
- poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)
题目链接:poj 2513 Colored Sticks 题目大意:有N个木棍,每根木棍两端被涂上颜色.如今给定每一个木棍两端的颜色.不同木棍之间拼接须要颜色同样的 端才干够.问最后是否能将N个木棍拼 ...
- [欧拉] poj 2513 Colored Sticks
主题链接: http://poj.org/problem? id=2513 Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Tota ...
- POJ 2513 Colored Sticks (欧拉回路 + 字典树 +并查集)
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27097 Accepted: 7175 ...
- POJ2513——Colored Sticks(Trie树+欧拉回路+并查集)
Colored Sticks DescriptionYou are given a bunch of wooden sticks. Each endpoint of each stick is col ...
- POJ 2513 Colored Sticks
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 28036 Accepted: 7428 ...
随机推荐
- QT:多线程HTTP下载文件
这里的线程是指下载的通道(和操作系统中的线程不一样),一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器 ...
- apache httpd, nginx, tomcat, jboss
web上的server都叫web server,但是大家分工也有不同的. nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什 ...
- thecorner.com.cn - Customer Care
thecorner.com.cn - Customer Care 所有主题 帮助 关于我们 thecorner.com 是通过专业的"迷你商店"形式荟萃最新男士.女士精选时尚商品和 ...
- 北京西服定做_衬衫定制_关于我们_Dimoon TLR.
北京西服定做_衬衫定制_关于我们_Dimoon TLR.
- cocos2d js 怎样动态载入外部图片
官网没有详细样例,仅仅有看api,研究成果例如以下 var that = this; var url = "http://xxxxxx"; cc.loader.loadImg(ur ...
- 【iOS开发-35】有了ARC内存管理机制,是否还须要操心内存溢出等问题?——面试必备
答案:必需要操心啊,ARC也不是万能的. 这里主要是涉及到集合类的数据类型. 比方数组,我们定义了一个可变数组muarr1,然后把一个对象p1加到muarr1中,此时会对这个对象retain一次,相当 ...
- WebConfig 配置文件详解
<?xml version="1.0"?><!--注意: 除了手动编辑此文件以外,您还可以使用 Web 管理工具来配置应用程序的设置.可以使用 Visual St ...
- 超级强大的SVG SMIL animation动画详解
本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordpress/?p=4333 //zxx: 本文的SVG在有 ...
- MSMQ是什么?
MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位 ...
- RDLC报表系列(三) 总计和折叠
继续接上一篇的内容,本文主要是简述总计和折叠 1.在Dept列右击,选择插入行->组内部下方(每个部门的Total),插入新的一行,并拆分单元格,然后合并列 3.设置文本框属性,格式为Total ...