POJ 2513 字典树+并查集+欧拉路径
Description:
给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。
解题思路:
可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点,把木棒看成边,这样相同的颜色就是同一个节点
问题便转化为:
给定一个图,是否存在“一笔画”经过涂中每一点,以及经过每一边一次。
这样就是求图中是否存在欧拉路Euler-Path。(我才知道这个就是欧拉路径。。。T_T)
由图论知识可以知道,无向图存在欧拉路的充要条件为:
① 图是连通的; // 用并查集判断就好啦。
② 所有节点的度为偶数,或者有且只有两个度为奇数的节点。
附代码(虽然有点小疑问):
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<string>
#define maxn 500000 + 100
using namespace std;
int fa[maxn];
int du[maxn];
int cnt;
void init()
{
int i;
for (i=0; i<maxn; ++i)
{
fa[i] = i;
}
cnt = 0;
}
int find(int v)
{
if (fa[v] == v) return v;
return fa[v] = find(fa[v]);
}
void unin(int x, int y)
{
int fx = find(x);
int fy = find(y);
if (fx != fy)
fa[fx] = fy;
}
struct trie
{
trie *next[26];
int key;
bool isleaf;
trie()
{
for (int i=0; i<26; ++i)
{
next[i] = NULL;
}
key = 0;
isleaf = false;
}
}Root, Node;
int creatTree(char word[])
{
trie *p = &Root;
char *str = word;
while(*str)
{
if (p->next[*str-'a'] == NULL)
p->next[*str-'a'] = new trie;
p = p->next[*str-'a'];
str++;
}
if (p->isleaf)
return p->key;
else
{
p->isleaf = true;
p->key = cnt++;
return p->key;
}
}
int main()
{
char str1[20], str2[20];
init();
while(~scanf("%s%s", str1, str2))
{
int a, b;
a = creatTree(str1);
b = creatTree(str2);
du[a]++; // T_T 还是布吉岛为什么。如果这两种颜色已经属于一个集合了。为什么还要度数++呢。所以。额。
du[b]++;
if (find(a) != find(b))
{
// du[a]++;
// du[b]++;
unin(a, b);
}
}
int temp = 0;
for (int i=0; i<cnt; ++i)
{
if (du[i] % 2)
temp++;
}
if (temp != 0 && temp != 2)
{
printf("Impossible\n");
return 0;
}
int ttemp = find(0);
for (int i=1; i<cnt; ++i)
{
if (find(i) != ttemp)
{
printf("Impossible\n");
return 0;
}
}
printf("Possible\n");
return 0;
}
POJ 2513 字典树+并查集+欧拉路径的更多相关文章
- POJ 2513 trie树+并查集判断无向图的欧拉路
生无可恋 查RE查了一个多小时.. 原因是我N define的是250500 应该是500500!!!!!!!!! 身败名裂,已无颜面对众人.. 吐槽完了 我们来说思路... 思路: 判有向图能否形成 ...
- POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)
http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...
- nyoj 230/poj 2513 彩色棒 并查集+字典树+欧拉回路
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=230 题意:给你许许多多的木棍,没条木棍两端有两种颜色,问你在将木棍相连时,接触的端点颜色 ...
- POJ 2513 无向欧拉通路+字典树+并查集
题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...
- POJ 2513 Colored Sticks (欧拉回路 + 字典树 +并查集)
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 27097 Accepted: 7175 ...
- poj2513 Colored Sticks —— 字典树 + 并查集 + 欧拉回路
题目链接:http://poj.org/problem?id=2513 题解:通过这题了解了字典树.用字典树存储颜色,并给颜色编上序号.这题为典型的欧拉回路问题:将每种颜色当成一个点.首先通过并查集判 ...
- POJ2513Colored Sticks(欧拉通路)(字典树)(并查集)
Colored Sticks Time Limit: 5000MS Memory ...
- PKU 2513 Colored Sticks(并查集+Trie树+欧拉路径(回路))
题目大意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相连接的一端必须是同颜色的. 解题思路: 可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点 ...
- [WC2005]双面棋盘(线段树+并查集)
线段树+并查集维护连通性. 好像 \(700ms\) 的时限把我的常数超级大的做法卡掉了, 必须要开 \(O_2\) 才行. 对于线段树的每一个结点都开左边的并查集,右边的并查集,然后合并. \(Co ...
随机推荐
- 20145331魏澍琛《网络对抗》Exp2 后门原理与实践
20145331魏澍琛<网络对抗>Exp2 后门原理与实践 基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 上网时候弹出一个广告说你中奖了,或者你可以贷款10万元之类 ...
- 星系炸弹|2015年蓝桥杯B组题解析第二题-fishers
星系炸弹 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之后爆炸. 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2 ...
- mybatis与hibernate常用的持久化类,及sqlsession和sqlsessionTemplate区别
首先, 通过翻阅源码,我们来整理一下mybatis进行持久化操作时重要的几个类:SqlSessionFactoryBuilder:build方法创建SqlSessionFactory实例.SqlSes ...
- hdu 1796 How many integers can you find 容斥定理
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- pandas 设置单元格的值
import pandas as pd import pickle import numpy as np dates = pd.date_range() df = pd.DataFrame(np.ar ...
- ubuntu16.04 kinetic 安装 robot-pose-publisher
sudo apt-get install ros-kinetic-robot-pose-publisher
- MongoDB(课时6 关系查询)
支持关系查询操作:大于($gt),小于($lt),大于等于($gte),小于等于($lte),不等于($ne ),等于(key:value 或 $eq).想让这些操作正常使用,需要准备一个数据集合. ...
- 音视频学习系列第(三)篇---wav文件的存储和解析
音视频系列 什么是wav wav是一种无损的音频文件格式,wav文件有两部分,第一部分是文件头,记录一些重要的参数信息,如音频的采样率,通道数,数据位宽,第二部分是数据部分,数据部分可以是PCM,也可 ...
- POJ - 2528 Mayor's posters(dfs+分治)
POJ - 2528 Mayor's posters 思路:分治思想. 代码: #include<iostream> #include<cstdio> #include< ...
- Lua面向对象 --- 单例
GameManager.lua: --单例模式是利用一个全局表来实现的 GameManager = {} Manager = {__index = GameManager} function Game ...