poj 2513 Colored Sticks Trie树
来源:互联网 发布:openwrt网络尖兵 编辑:程序博客网 时间:2024/06/13 07:40
Colored Sticks
Time Limit: 5000MS Memory Limit: 128000KTotal Submissions: 32172 Accepted: 8493
Description
You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a straight line such that the colors of the endpoints that touch are of the same color?
Input
Input is a sequence of lines, each line contains two words, separated by spaces, giving the colors of the endpoints of one stick. A word is a sequence of lowercase letters no longer than 10 characters. There is no more than 250000 sticks.
Output
If the sticks can be aligned in the desired way, output a single line saying Possible, otherwise output Impossible.
Sample Input
blue redred violetcyan blueblue magentamagenta cyan
Sample Output
Possible
Hint
Huge input,scanf is recommended.
Source
The UofA Local 2000.10.14
给出一些木棍两头都有颜色,问是否能连成一条线,欧拉路径+并查集+trie数
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;#define Max 500010struct node{int x;node *next[26];};int degree[Max],fa[Max],cnt,ant;node *root , mem[Max*10];node * create(){node * p =&mem[ant++];for(int i=0;i<26;i++){p->next[i]=NULL;}return p;}void insert(char *s,int x){node * p =root;int k;for(int i=0;i<strlen(s);i++){k=s[i]-'a';if(p->next[k]==NULL){p->next[k]=create();}p=p->next[k];}p->x=x;}int search(char *s){node *p = root;int k;for(int i=0;i<strlen(s);i++){k=s[i]-'a';if(p->next[k]==NULL) {return 0;}p=p->next[k];}return p->x;}void init(){for(int i=1;i<=Max;i++){fa[i]=i;}memset(degree,0,sizeof(degree));}int find(int x){if(x!=fa[x]){fa[x]=find(fa[x]);}return fa[x];}void Union(int a,int b){fa[a]=b;}bool judge(){int u=0;for(int i=1;i<=cnt;i++){u+=degree[i]%2;}if(u>2||u==1) return false;u=find(1);for(int i=2;i<=cnt;i++){if(find(i)!=u) {cout<<i;return false;}}return true;}int main(){int x,y;int xx,yy;char s1[15],s2[15];init();root = create();cnt =0 ;while(~scanf("%s %s",s1,s2)){x=search(s1);y=search(s2);if(x==0) insert(s1,x = ++cnt);if(y==0) insert(s2,y = ++cnt);degree[x]++;degree[y]++;xx=find(x);yy=find(y);if(xx!=yy){Union(xx,yy);}}if(judge()) cout<<"Possible";else cout<<"Impossible";return 0;}
0 0
- POJ 2513 Colored Sticks 【Trie树】
- poj 2513 Colored Sticks (trie 树)
- poj 2513 Colored Sticks Trie树
- poj 2513 Colored Sticks trie树+欧拉图+并查集
- POJ Colored Sticks(2513) -trie树&欧拉回路
- POJ 2513 Colored Sticks 欧拉回路+trie树
- POJ 2513 Colored Sticks(Trie)
- poj 2513 Colored Sticks(Trie+hash+dsu)
- [poj 2513] Colored Sticks (trie+欧拉路)
- POJ-2513 Colored Sticks【并查集+Trie+欧拉路】
- POJ 2513 Colored Sticks
- poj 2513 Colored Sticks
- POJ 2513 Colored Sticks
- poj 2513 colored sticks
- Poj 2513 Colored Sticks
- POJ 2513 Colored Sticks
- POJ 2513 Colored Sticks
- POJ 2513 Colored Sticks
- Cocos2d-x 的内存管理
- httpclient请求方式下的泛型json转换问题
- 博客创建
- java中FileOutputStream和FileInputStream类用法(总结的挺好)
- Python基础之变量类型
- poj 2513 Colored Sticks Trie树
- PHP开发之使用CodeIgniter搭建一个简单的项目
- Adobe Photoshop
- Observer Pattern 观察者模式
- UVa 10795 A Diffenent Task 新汉诺塔问题
- 微信公众号demo
- 用pngcrush反编译ios app 资源文件
- NETBEANS——HTML5(PHP) + SCSS(with RUBY) 环境的配置过程
- Decorator Pattern 装饰者模式