POJ2513 Colored Sticks 欧拉路径+Tire树
来源:互联网 发布:再见老婆啥软件 编辑:程序博客网 时间:2024/05/19 17:04
题目链接:http://poj.org/problem?id=2513
题目大意:有n条木棒,没条木棒两端各有一种颜色,木棒之间可以连接当且仅当连接端的颜色相同,让判断对于给出的若干木棒,能否全部连接起来。
分析:以每种颜色为顶点建图,要想所有木棒都连接起来,即找出该图的一条欧拉路径。对于每种颜色,我们需要一一对应一个数字,我用map写了一个,果然TLE了,毕竟数据量还是不小的,改为用Tire树还跑了1280MS,要是把存储结构有链表换成数组模拟应该会快一些。
实现代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cstdlib>using namespace std;const int maxn=500005;int ind[maxn];int par[maxn],ran[maxn];int cnt;void init(){ for(int i=0;i<maxn;i++) { par[i]=i; ran[i]=1; }}int Find(int x){ if(par[x]!=x) return par[x]=Find(par[x]); return x;}void Union(int a,int b){ int x=Find(a); int y=Find(b); if(x==y) return ; par[x]=y;}typedef struct node{ bool terminal; struct node *nex[26]; int id;}tire;tire *creat(){ tire *p=new tire; for(int i=0;i<26;i++) p->nex[i]=NULL; p->terminal=false; p->id=0; return p;}int insert(tire *root,char *str){ tire *p=root; int i=0; while(str[i]!='\0') { int x=str[i]-'a'; if(p->nex[x]==NULL) p->nex[x]=creat(); p=p->nex[x]; i++; } if(p->terminal) return p->id; else { p->terminal=true; p->id=cnt++; return p->id; }}void del(tire *root){ for(int i=0;i<26;i++) if(root->nex[i]!=NULL) del(root->nex[i]); free(root);}int main(){ char str1[15],str2[15]; init(); cnt=0; tire *root=creat(); memset(ind,0,sizeof(ind)); while(~scanf("%s%s",str1,str2)) { int u=insert(root,str1); int v=insert(root,str2); ind[u]=!ind[u]; ind[v]=!ind[v]; Union(u,v); } int sum_par=0,sum_ind=0; for(int i=0;i<cnt;i++) { //printf("par[%d]=%d\n",i,par[i]); if(par[i]==i) sum_par++; if(ind[i]&1) sum_ind++; } //printf("%d %d\n",sum_par,sum_ind); if(sum_par>1) puts("Impossible"); else { if(sum_ind==0||sum_ind==2) puts("Possible"); else puts("Impossible"); } return 0;}
0 0
- POJ2513 Colored Sticks 欧拉路径+Tire树
- poj2513 Colored Sticks(tire树+路径压缩并查集+欧拉通路)
- POJ2513 Colored Sticks 欧拉路径+Trie
- poj2513 Colored Sticks(欧拉回路判断+字典树)
- POJ2513-Colored Sticks(并查集 欧拉回路)
- POJ2513 Colored Sticks(字典树+并查集+欧拉回路)
- poj2513 Colored Sticks (欧拉通路+Trie树+并查集)
- poj2513 Colored Sticks —— trie树 + 并查集 + 欧拉回路
- poj2513 Colored Sticks / nyoj230 彩色棒(字典树,并查集,欧拉通路)
- POJ 2513 Colored Sticks 字典树hash 欧拉路径
- POJ 2513 Colored Sticks(字典树+欧拉路径)
- 欧拉路+字典树 poj2513 Colored Sticks
- POJ2513 Colored Sticks 欧拉路+字典树标号
- POJ2513--Colored Sticks
- poj2513 Colored Sticks
- poj2513 Colored Sticks
- POJ2513-Colored Sticks
- poj2513 Colored Sticks【欧拉图】
- glass choice and eye protection
- I2C总线的仲裁机制
- JAVA 内部静态类--解析静态内部类的使用目的与限制
- [signal processing] FFT快速傅立叶变换
- 九度OJ 题目1058:反序输出
- POJ2513 Colored Sticks 欧拉路径+Tire树
- Spring 3整合Quartz 2实现定时任务--转
- Matrix:The matrix in spiral order
- Android集成友盟分享SDK出现的 "微信发送被拒绝"" 的错误的处理方法
- hdu1035
- c++ primer plus 第十章-编程题6
- Qwt之Plot
- Java中实现复制文件或文件夹
- CocoaPods安装经历