题目链接: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. 前端自动化工具 -- Gulp 使用简介

    gulp是基于流的前端自动化构建工具. 之前也谈到了 grunt的用法,grunt其实就是配置+配置的形式. 而gulp呢,是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用 ...

  2. Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室

    一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...

  3. 重构第18天 用条件语句来代替异常(Replace exception with conditional)

    理解:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断. 详解: 重构前代码: public class Microwave { private IMicrowave ...

  4. android图片拖动缩放

    这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助.android 大图片拖拽缩放 这篇就不做过多介绍了,直接上源码: public class ...

  5. ActiveReports 报表应用教程 (4)---分栏报表

    在 ActiveReports 中可以实现分栏报表布局样式,可以设置横向分栏.纵向分栏,同时进行分栏和分组设置,统计分栏分组的小计.合计等.在商业报表系统中常见的分栏报表有商品标签.员工工卡.条码打印 ...

  6. java注释指导手册

    译文出处: Toien Liu   原文出处:Dani Buiza 编者的话:注解是java的一个主要特性且每个java开发者都应该知道如何使用它. 我们已经在Java Code Geeks提供了丰富 ...

  7. Hibernate框架之入门

    1.Hibernate框架简述 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...

  8. 什么是目标框架别名(What are the Target Framework Monikers (TFMs))?

    我们现在的.NET Core 1.0应用(ASP.NET Core 1.0应用或控制台应用)有了新的被运行在不同框架上的可能性:①运行在.NET Core平台上 ②运行在传统的.NET Framewo ...

  9. 为什么重新设计 ASP.NET?

    灵活的跨平台运行时需求 早期 .NET Framework 版本一直作为单一且全面的整体进行安装,每个新版本都包含了新功能和几乎所有早期功能,而鲜有删减,这就不可避免的造成Framework的体积的增 ...

  10. Android 手机卫士17--缓存清理

    清理单个应用缓存 通过反射调用方法 需要权限:android.permission.DELETE_CACHE_FILES. 以上权限为系统权限,手机卫士应用为用户应用,不能拿到此权限 换思路: 调用系 ...