博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2513 Colored Sticks【欧拉通路】
阅读量:6424 次
发布时间:2019-06-23

本文共 2886 字,大约阅读时间需要 9 分钟。

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 red

red violet
cyan blue
blue magenta
magenta cyan

Sample Output

Possible

 

并查集①

code:

View Code
#include
#include
#define maxn 500005 int de[maxn]; int f[maxn]; int v[maxn]; int find(int x) {
int r=x; while(r!=f[r]) r=f[r]; int i=x; int j; while(i!=r) {
j=f[i]; f[i]=r; i=j; } return r; } void join(int x,int y) {
int fx=find(x); int fy=find(y); if(fx!=fy) {
if(fx
2) {
printf("Impossible\n"); return 0; } } tot=0; for(i=1;i
1) {
printf("Impossible\n"); return 0; } } printf("Possible\n"); return 0; }

并查集②:

 

View Code
#include
#include
#define maxn 500005 int de[maxn]; int f[maxn]; int find(int x) {
int r=x; while(r!=f[r]) r=f[r]; int i=x; int j; while(i!=r) {
j=f[i]; f[i]=r; i=j; } return r; } void join(int x,int y) {
if(find(x)==0) f[x]=x; if(find(y)==0) f[y]=y; f[find(x)]=find(y); } int Hash(char s[]) {
int i,hash=1; int len=strlen(s); for(i=0;i
2) {
printf("Impossible\n"); return 0; } } i=1; for(i=1;i

 

字典树:

 

View Code
#include
#include
#define maxn 500005 int de[maxn]; int f[maxn]; int num; struct node {
int id,i; node *next[26]; node() {
id=-1; for(i=0;i<26;i++) next[i]=NULL; } }*root; int find(int x) {
int r=x; while(r!=f[r]) r=f[r]; int i=x; int j; while(i!=r) {
j=f[i]; f[i]=r; i=j; } return r; } void join(int x,int y) {
if(find(x)==0) f[x]=x; if(find(y)==0) f[y]=y; f[find(x)]=find(y); } int insert(char s[]) {
int i; node *p=root; int len=strlen(s); for(i=0;i
next[s[i]-'a']==NULL) p->next[s[i]-'a']=new node; p=p->next[s[i]-'a']; } if(p->id==-1) p->id=num++; return p->id; } int main() {
num=0; root=new node; char a[11],b[11]; int p,q,flag; int i,sum; for(i=0;i
2||flag!=find(i)) {
printf("Impossible\n"); return 0; } } printf("Possible\n"); return 0; }

转载于:https://www.cnblogs.com/dream-wind/archive/2012/03/16/2399565.html

你可能感兴趣的文章
DIV+CSS命名规范有助于SEO
查看>>
web项目buildPath与lib的区别
查看>>
我的友情链接
查看>>
ifconfig:command not found的解决方法
查看>>
计算机是怎么存储数字的
查看>>
Codeforces Round #369 (Div. 2) A. Bus to Udayland 水题
查看>>
adb上使用cp/mv命令的替代方法(failed on '***' - Cross-device link解决方法)
查看>>
C++标准库简介、与STL的关系。
查看>>
Spring Boot 3 Hibernate
查看>>
查询EBS请求日志的位置和名称
查看>>
大型机、小型机、x86服务器的区别
查看>>
J2EE十三个规范小结
查看>>
算法(第四版)C#题解——2.1
查看>>
网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?...
查看>>
大数据开发实战:Stream SQL实时开发一
查看>>
C++返回引用的函数例程
查看>>
dll 问题 (转)
查看>>
REST API用得也痛苦
查看>>
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>