poj 2513 Colored Sticks
// 判断图是否联通 在连通的基础上还要判断是否存在欧拉通路// 判断连通就并查集了 判断是否存在欧拉通路: 点度数为数的点 ==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相关推荐
- 欧拉路径 之 poj 2513 Colored Sticks
/* 欧拉路径 之 poj 2513 Colored Sticks欧拉路径: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径.无向图存在欧拉路径 充要条件:1) 图是连通的 ...
- poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)
题目:http://poj.org/problem?id=2513 参考博客:http://blog.csdn.net/lyy289065406/article/details/6647445 htt ...
- POJ - 2513 Colored Sticks(字典树+并查集+欧拉回路)
题目链接:点击查看 题目大意:给出n个木棍,问若两两相连,最终能否构成一根长直木棍,相连的规则是两个木棍的相接端点的颜色需要保持相同 题目分析:关于这个题目,我们可以将每个木棍视为一条边,每个木棍的两 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- POJ 2513 Colored Sticks
POJ_2513 这个题目实际上要求木棍能够组成一个欧拉道路即可.为了练字典树所以用字典树写的,当然,这个题目用哈希做也可以. 需要注意的是由于木棍有25W,因此不同的顶点最多有50W,所以存储图顶点 ...
- poj 2513(欧拉路径+字典树映射)
题目链接:http://poj.org/problem?id=2513 思路:题目还是很简单的,就是判断是否存在欧拉路径,我们给每个单词的头和尾映射序号,统计度数.对于给定的无向图,当且仅当图连通并且 ...
- 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks
题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...
- 【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)
一.传送门 http://poj.org/problem?id=2653 https://zoj.pintia.cn/problem-sets/91827364500/problems/9182736 ...
- POJ 2653 Pick-up sticks (线段相交)
题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...
最新文章
- Vim YouCompleteMe 安装配置
- C#中Lock关键字的使用
- spring之二——使用maven创建一个java project
- Lync-用户-电话号码-更新
- php 特有,PHP单一入口的特有作用
- c++现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- PaddlePaddle Perceptron Example
- Java图形界面设计——substance皮肤
- Docker简介和安装
- 在微信小程序中绘制图表(part3)
- java常用的网关有哪几种_拼多多java开发一面、二面合并面经
- HR图像添加运动焦散模糊【Matlab】
- Linux---Samba文件共享服务
- Ubuntu 20.04 通过 docker 安装 微信 和 QQ、修改字体大小
- Final Cut Pro X无法导入自家的MOV格式,解决方法。
- MAC微信小视频和图片等在本地保存位置地址
- EffectiveC++-条款54:让自己熟悉包括TR1在内的标准程序库
- hiveserver2 和beeline_Beeline连接Hiveserver2错误
- 搜索引擎如何判定站群是否作弊?
- 从游戏中学习产品设计2:消费篇
热门文章
- iOS执行时工具-cycript
- [MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作
- mysql事务实战_mysql事务隔离级别详解和实战
- cprintdialog预览_怎样用CPrintDialog来实现打印功能
- linux 终端调用MATLAB程序
- python清空列表clear_如何在Python中清空列表?
- 初级程序员需要接触好的架构代码
- java 鼠标拖动矩形_java – 用鼠标拖动创建矩形,而不是绘制
- ios系统python编译器_MacBook如何安装Python编译器-百度经验
- datetime unix php,PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】...