// 判断图是否联通 在连通的基础上还要判断是否存在欧拉通路// 判断连通就并查集了  判断是否存在欧拉通路: 点度数为数的点 ==1 >=3就是不存在的 其它是存在的// 我开始用 map 判重  然后就悲剧了一上午 好久没写 Trie树了  都忘了、

#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
#define MOD 1000000007
#define maxn 500100
char s1[20],s2[20];
int d[maxn];//,out[maxn];
int f[maxn],num[maxn];
int Fin(int x){if(x!=f[x])f[x]=Fin(f[x]);return f[x];
}
int sz;
int ch[maxn][26];
int val[maxn];
int idx(char c){ return c-'a';}
void insert(char *s,int v){int u=0;//,len=strlen(s);int c;for(int i=0;s[i]!='\0';i++){c=idx(s[i]);if(!ch[u][c]){memset(ch[sz],0,sizeof(ch[sz]));val[sz]=0;ch[u][c]=sz++;}u=ch[u][c];}// printf("%d-",v);val[u]=v;
}
int search(char *s){int u=0;//,len=strlen(s);int c;for(int i=0;s[i]!='\0';i++){c=idx(s[i]);// printf("c=%c",s[i]);if(!ch[u][c])return 0;u=ch[u][c];}return val[u];
}
int main(){int i;int n=0;int u,v;for(i=1;i<=maxn;i++)f[i]=i,num[i]=1,d[i]=0;sz=1;memset(ch[0],0,sizeof(ch[0]));while(scanf("%s %s",s1,s2)!=EOF){if(u=search(s1)){d[u]++;}else{insert(s1,++n);u=n;d[u]++;}if(v=search(s2)){d[v]++;}else{insert(s2,++n);v=n;d[v]++;}//printf("%d %d\n",u,v);u=Fin(u);v=Fin(v);if(u!=v){if(num[u]>num[v]){f[v]=u;num[u]+=num[v];}else{f[u]=v;num[v]+=num[u];}}}int bf;bf=0;for(i=1;i<=n;i++)if(d[i]%2) bf++;if(bf==1||bf>2){ printf("Impossible\n");return 0;}bf=Fin(1);for(i=2;i<=n;i++)if(bf!=Fin(i)){printf("Impossible\n");return 0;}printf("Possible\n");return 0;
}

转载于:https://www.cnblogs.com/372465774y/p/3200134.html

poj 2513 Colored Sticks相关推荐

  1. 欧拉路径 之 poj 2513 Colored Sticks

    /* 欧拉路径 之 poj 2513 Colored Sticks欧拉路径: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径.无向图存在欧拉路径 充要条件:1) 图是连通的 ...

  2. poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)

    题目:http://poj.org/problem?id=2513 参考博客:http://blog.csdn.net/lyy289065406/article/details/6647445 htt ...

  3. POJ - 2513 Colored Sticks(字典树+并查集+欧拉回路)

    题目链接:点击查看 题目大意:给出n个木棍,问若两两相连,最终能否构成一根长直木棍,相连的规则是两个木棍的相接端点的颜色需要保持相同 题目分析:关于这个题目,我们可以将每个木棍视为一条边,每个木棍的两 ...

  4. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  5. POJ 2513 Colored Sticks

    POJ_2513 这个题目实际上要求木棍能够组成一个欧拉道路即可.为了练字典树所以用字典树写的,当然,这个题目用哈希做也可以. 需要注意的是由于木棍有25W,因此不同的顶点最多有50W,所以存储图顶点 ...

  6. poj 2513(欧拉路径+字典树映射)

    题目链接:http://poj.org/problem?id=2513 思路:题目还是很简单的,就是判断是否存在欧拉路径,我们给每个单词的头和尾映射序号,统计度数.对于给定的无向图,当且仅当图连通并且 ...

  7. 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks

    题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...

  8. 【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)

    一.传送门 http://poj.org/problem?id=2653 https://zoj.pintia.cn/problem-sets/91827364500/problems/9182736 ...

  9. POJ 2653 Pick-up sticks (线段相交)

    题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...

最新文章

  1. Vim YouCompleteMe 安装配置
  2. C#中Lock关键字的使用
  3. spring之二——使用maven创建一个java project
  4. Lync-用户-电话号码-更新
  5. php 特有,PHP单一入口的特有作用
  6. c++现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
  7. PaddlePaddle Perceptron Example
  8. Java图形界面设计——substance皮肤
  9. Docker简介和安装
  10. 在微信小程序中绘制图表(part3)
  11. java常用的网关有哪几种_拼多多java开发一面、二面合并面经
  12. HR图像添加运动焦散模糊【Matlab】
  13. Linux---Samba文件共享服务
  14. Ubuntu 20.04 通过 docker 安装 微信 和 QQ、修改字体大小
  15. Final Cut Pro X无法导入自家的MOV格式,解决方法。
  16. MAC微信小视频和图片等在本地保存位置地址
  17. EffectiveC++-条款54:让自己熟悉包括TR1在内的标准程序库
  18. hiveserver2 和beeline_Beeline连接Hiveserver2错误
  19. 搜索引擎如何判定站群是否作弊?
  20. 从游戏中学习产品设计2:消费篇

热门文章

  1. iOS执行时工具-cycript
  2. [MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作
  3. mysql事务实战_mysql事务隔离级别详解和实战
  4. cprintdialog预览_怎样用CPrintDialog来实现打印功能
  5. linux 终端调用MATLAB程序
  6. python清空列表clear_如何在Python中清空列表?
  7. 初级程序员需要接触好的架构代码
  8. java 鼠标拖动矩形_java – 用鼠标拖动创建矩形,而不是绘制
  9. ios系统python编译器_MacBook如何安装Python编译器-百度经验
  10. datetime unix php,PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】...