POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)
下面两个写得很清楚了,就不在赘述。
http://blog.sina.com.cn/s/blog_5cd4cccf0100apd1.html
http://www.cnblogs.com/lyy289065406/archive/2011/07/30/2122265.html
我这里没用trie来表示颜色种类,而是用数组对颜色离散化,之后就差不多一样了,用并查集判断是否连通,再判断奇顶点的个数是否为0个或2个。
这题我开始大意了,刚开始就只判断奇数度的节点个数是否为0或2,没有考虑判断图的连通性。
以后要注意碰到图的问题要考虑连通性的问题。
#include <iostream>
#include <stdio.h>
#include <map>
#include <string.h>
#include <algorithm>
#include <string> using namespace std;
const int maxn=;
int num[maxn]; //存储某颜色出现的个数
int idx=;
int cnt;
int idxw=; struct Wood{
char left[],right[];
}wood[maxn/]; struct Node{
char str[]; //存储颜色
bool operator<(const Node tmp)const{
if(strcmp(str,tmp.str)<=)
return true;
else
return false;
}
}node[maxn];
//二分查找颜色对应离散的值
int binarySearch(char*str){
int l=,r=cnt+,mid;
while(r-l>){
mid=(r+l)/;
if(strcmp(node[mid].str,str)<=)
l=mid;
else
r=mid;
}
return l;
}
struct UF{
int fa[maxn];
void init(){
for(int i=;i<maxn;i++)
fa[i]=i;
}
int find_root(int x){
if(fa[x]!=x)
fa[x]=find_root(fa[x]);
return fa[x];
}
void Union(int a,int b){
int x=find_root(a); //一开始这里写错了,括号里的写成了x和y。。。导致一直WA。。。
int y=find_root(b);
fa[y]=x;
}
}uf;
int main()
{
char s1[],s2[];
while(scanf("%s%s",wood[idxw].left,wood[idxw].right)!=EOF){
strcpy(node[idx++].str,wood[idxw].left);
strcpy(node[idx++].str,wood[idxw].right);
idxw++;
}
sort(node+,node+idx);
memset(num,,sizeof(num));
cnt=;
num[]++;
//进行离散处理,同时统计每种颜色出现的个数
for(int i=;i<idx;i++){
if(strcmp(node[i].str,node[i-].str)!=){
strcpy(node[++cnt].str,node[i].str);
num[cnt]++;
}
else{
num[cnt]++;
}
}
int u,v;
uf.init();
for(int i=;i<idxw;i++){
u=binarySearch(wood[i].left);
v=binarySearch(wood[i].right);
uf.Union(u,v);
}
int c=,eular=; //c为连通分支的个数,如果为1,表明图连通;eular为奇顶点的个数。
for(int i=;i<=cnt;i++){
if(uf.fa[i]==i){
c++;
}
if(num[i]%==){
eular++;
}
}
//idxw==1表明数据为空,要输出Possible,这点要注意!
//所有点都在同一个集合,且某颜色出现次数为奇数的只能为0个或2个,即存在欧拉通路。
if(idxw== || (c==&&(eular==||eular==))){
printf("Possible\n");
}
else
printf("Impossible\n");
return ;
}
POJ 2513 Colored Sticks (离散化+并查集+欧拉通路)的更多相关文章
- Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash
题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点 或者 ...
- NYOJ--42--dfs水过||并查集+欧拉通路--一笔画问题
dfs水过: /* Name: NYOJ--42--一笔画问题 Author: shen_渊 Date: 18/04/17 15:22 Description: 这个题用并查集做,更好.在练搜索,试试 ...
- poj 2513 Colored Sticks(欧拉路径+并检查集合+特里)
题目链接:poj 2513 Colored Sticks 题目大意:有N个木棍,每根木棍两端被涂上颜色.如今给定每一个木棍两端的颜色.不同木棍之间拼接须要颜色同样的 端才干够.问最后是否能将N个木棍拼 ...
- [欧拉] poj 2513 Colored Sticks
主题链接: http://poj.org/problem? id=2513 Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Tota ...
- POJ 2513 Colored Sticks - from lanshui_Yang
题目大意:给定一捆木棒,每根木棒的每个端点涂有某种颜色.问:是否能将这些棒子首位项链,排成一条直线,且相邻两根棍子的连接处的颜色一样. 解题思路:此题是一道典型的判断欧拉回路或欧拉通路的问题,以木棍的 ...
- POJ 1386 Play on Words(有向欧拉通路 连通图)
题意 见下方中文翻译 每一个单词能够看成首尾两个字母相连的一条边 然后就是输入m条边 推断是否能构成有向欧拉通路了 有向图存在欧拉通路的充要条件: 1. 有向图的基图连通: 2. 全部点的出度和 ...
- poj 2513 Colored Sticks trie树+欧拉图+并查集
点击打开链接 Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27955 Accepted ...
- POJ 2513 Colored Sticks (欧拉回路+并查集+字典树)
题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...
- POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)
http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...
随机推荐
- flask 开发记录
from flask import request 判断method方式 request.method 'POST', ‘GET’ 获取form内容 request.form['form_name' ...
- TETRIS 项目开发笔记
java学习一个月了,没有什么进展,期间又是复习Linux,又是看Android,瞻前顾后,感觉自己真的是贪得无厌, 学习的东西广而不精,所以写出的文章也就只能泛泛而谈.五一小长假,哪里都没有去,也不 ...
- 数据结构中的堆棧在C#中的实现
一.大致学习 堆棧是一种面向表的数据结构,堆棧中的数据只能在标的某一短进行添加和删除操作,是一种典型的(LIFO)数据结构. 现实生活中的理解:自助餐厅的盘子堆,人们总是从顶部取走盘子,当洗碗工把洗好 ...
- 10个 iOS 用户暂可以嘲笑 Android 的特点
Android 与 iOS 设备之间的争斗从未停止,毕竟一切高科技产品的理念和实际表现方式都不相同.就拿 Android 来说,很多功能令用户并 不太开心,甚至是令人愤怒,下面让我们来简单的盘点 10 ...
- 如何向VS2010中插入ActiveX控件并且附带相应的类
上两篇文章中我们已经讲述了ActiveX控件的一些相关知识,本文中,简单说明一下如何在我们自己的程序中使用ActiveX控件.(仍以我们上节课的例子为例) 我们打开VS2010编辑器,新建一个基于对话 ...
- 一个flag
最近要学的东西 1.矩阵树定理 2.KM 3.FFT 4.单纯型 5.自动机系列 6.插头DP 7.计算几何(?) 8.数学相关(?)
- algorithm之改变序列算法--待解决
简述:改变序列算法,参见http://www.cplusplus.com/reference/algorithm/?kw=algorithm 待解决问题:iterator_traits.std::mo ...
- week 9 scenario testing
1:How do you expect different personas to use your software? What’s their need and their goals, ho ...
- 查看linux命令类型
type type -a type type是内建变量 root@akayer-p6:~# type -a lsls 是 `ls --color=auto' 的别名ls 是 /bin/ls
- windows 2008 下C#调用office组件访问拒绝的解决方法(failed due to the following error: 80070005 拒绝访问)
"组件服务"- >"计算机"- >"我的电脑"- >"DCOM配置"->找到word->属 ...