题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=230

题意:给你许许多多的木棍,没条木棍两端有两种颜色,问你在将木棍相连时,接触的端点颜色必须相同,是否能把它们都连起来

思路:很明显的欧拉路径,但题目给的字符串数据很大,得用字典树存取。

代码如下:

#include "stdio.h"
#include "string.h"
#include "stdlib.h" #define N 505000
int set[N],du[N]; int find(int x)
{
if(set[x]==-1) return x;
return set[x]=find(set[x]);
}
void bing(int a,int b)
{
int fa = find(a);
int fb = find(b);
if(fa!=fb) set[fa] = fb;
} struct node
{
struct node *next[26];
int num;
};
int id; void BFS(node *root);
int Trie(node *root,char *s);
void Date_process(int n)
{
int i=0;
int t1,t2;
char s1[15],s2[15];
node *root = (node *)malloc(sizeof(node));
for(i=0; i<26; ++i)
root->next[i] = NULL;
root->num = -1;
id = 0;
memset(du,0,sizeof(du));
memset(set,-1,sizeof(set)); for(i=0; i<n; ++i)
{
scanf("%s %s",s1,s2);
t1 = Trie(root,s1);
t2 = Trie(root,s2);
du[t1]++;
du[t2]++;
bing(t1,t2);
}
BFS(root);
} int main()
{
int T;
int i,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
getchar();
if(n==0)
{
printf("Possible\n");
continue;
}
Date_process(n);
bool flag = true;
int k = find(0);
for(i=0; i<id; ++i)
{
if(find(i)!=k)
flag = false;
}
if(!flag) //若该图不连通,Impossible
{
printf("Impossible\n");
continue;
}
int ans=0;
for(i=0; i<id; ++i)
{
if(du[i]%2==1)
ans++;
}
if(ans==2 || ans==0) //欧拉回路或者欧拉路径 Possible
printf("Possible\n");
else
printf("Impossible\n");
}
return 0;
} int Trie(node *root,char *s) //字典树
{
int i=0;
node *p=root;
while(s[0]!='\0')
{
if(p->next[s[0]-'a']==NULL)
{
node *tt;
tt = (node *)malloc(sizeof(node));
tt->num = -1;
for(i=0; i<26; ++i) tt->next[i] = NULL;
p->next[s[0]-'a'] = tt;
p = tt;
}
else
p = p->next[s[0]-'a'];
s++;
}
if(p->num==-1)
p->num = id++;
return p->num;
} void BFS(node *root) //深搜释放内存
{
int i;
if(root==NULL) return ;
for(i=0; i<26; i++)
{
if(root->next[i]!=NULL)
BFS(root->next[i]);
}
free(root);
}

nyoj 230/poj 2513 彩色棒 并查集+字典树+欧拉回路的更多相关文章

  1. 优先队列 + 并查集 + 字典树 + 欧拉回路 + 树状数组 + 线段树 + 线段树点更新 + KMP +AC自动机 + 扫描线

    这里给出基本思想和实现代码 . 优先队列 : 曾经做过的一道例题       坦克大战 struct node { int x,y,step; friend bool operator <(no ...

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

    题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...

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

    https://vjudge.net/problem/POJ-2513 题解转载自:優YoU  http://user.qzone.qq.com/289065406/blog/1304742541 题 ...

  4. POJ 2513 无向欧拉通路+字典树+并查集

    题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...

  5. PKU 2513 Colored Sticks(并查集+Trie树+欧拉路径(回路))

    题目大意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相连接的一端必须是同颜色的. 解题思路: 可以用图论中欧拉路的知识来解这道题,首先可以把木棒两端看成节点 ...

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

    题目链接: https://vjudge.net/problem/POJ-2513 题目大意: 给一些木棍,两端都有颜色,只有两根对应的端点颜色相同才能相接,问能不能把它们接成一根木棍 解题思路: 题 ...

  7. UVA1455 - Kingdom(并查集 + 线段树)

    UVA1455 - Kingdom(并查集 + 线段树) 题目链接 题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum ...

  8. 【bzoj5133】[CodePlus2017年12月]白金元首与独舞 并查集+矩阵树定理

    题目描述 给定一个 $n\times m$ 的方格图,每个格子有 ↑.↓.←.→,表示从该格子能够走到相邻的哪个格子.有一些格子是空着的,需要填上四者之一,需要满足:最终的方格图中,从任意一个位置出发 ...

  9. 并查集&线段树&树状数组&排序二叉树

    超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11 ...

随机推荐

  1. 重新想象 Windows 8 Store Apps (69) - 其它: 自定义启动屏幕, 程序的运行位置, 保持屏幕的点亮状态, MessageDialog, PopupMenu

    [源码下载] 重新想象 Windows 8 Store Apps (69) - 其它: 自定义启动屏幕, 程序的运行位置, 保持屏幕的点亮状态, MessageDialog, PopupMenu 作者 ...

  2. idea使用maven搭建springmvc

    最近学着搭建springmvc,写此博客记录一下 idea版本:2016.3.1maven: apache-maven-3.3.9tomcat:apache-tomcat-8.5.8 1.New Pr ...

  3. Python调用C的SDK出现返回值不符合预期以及Segmentation fault

    1.sdk返回值不是int型 1.1 登录函数调用 def login(ip, port, username, password, device_info, error_code):"&qu ...

  4. FL2440驱动添加(5)ADC驱动学习笔记

    由图可知,模拟ADC分为两部分功能,一部分是触屏功能,另一部分就是普通ADC功能.分别可以产生INT_TC和INT_ADC 两个中断.该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0. ...

  5. LGLCalender (价格日历)

    一直未能找到自己想要的日历价格,就算右也不是我想要的,今天自己封装了一个,欢迎各位来查阅,不足的地方请指教 最新代码下载地址https://github.com/liguoliangiOS/LGLCa ...

  6. Docker on CentOS for beginners

    Introduction The article will introduce Docker on CentOS. Key concepts Docker Docker is the world's ...

  7. 一个web页面的访问的过程

    Browers是如何在浩瀚的互联网上找到我们需要的资源呢? 以下将记录这个过程,这个过程是web编程需要需要熟知的. 用户打开浏览器输入目标地址(比如http://www.sina.com),那么接下 ...

  8. Linux命令详解之—pwd命令

    Linux的pwd命令也是一个非常常用的命令,本文为大家介绍下Linux中pwd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux pwd命令用于显示工作目录. 执行pwd指 ...

  9. 静态导入Static import

    静态导入Static import 要使用静态成员(方法和变量)我们必须给出提供这个静态成员的类. 使用静态导入可以使被导入类的静态变量和静态方法在当前类直接可见,使用这些静态成员无需再给出他们的类名 ...

  10. styleCop

    1styleCop安装 安装参考 2和VS集成 要和vs集成一定要在安装时把MSBuild files那个选项选中的,否则安装后是不会和VS集成集成的. 3styleCop使用 User Guide ...