题目链接: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. [水煮 ASP.NET Web API2 方法论](3-3)路由默认值

    问题 如何为路由中参数设置默认值. 解决方案 不管使用属性路由还是集中式路由,ASP.NET WEB API 都可以很方便的为路由定义默认参数.在每次客户端请求的时候,如果客户端没有传这些参数,框架会 ...

  2. IIS启动网站出错的几个解决方法

    在ASP.NET项目中使用了IIS服务器,由于系统是XP的,而在装系统的时候IIS没有一起装,所以从网上下载的IIS5.0版本(其它版本XP是用不了的).但是在使用的过程中老是出问题,每次调试好后,过 ...

  3. 如何弹出一定的大小的web窗体?

    如何弹出一定的大小的web窗体?  摘自: http://blog.163.com/hweibin126@126/blog/static/17044246920108413348344/ 一.wind ...

  4. 重新想象 Windows 8 Store Apps (43) - 多线程之任务: Task 基础, 多任务并行执行, 并行运算(Parallel)

    [源码下载] 重新想象 Windows 8 Store Apps (43) - 多线程之任务: Task 基础, 多任务并行执行, 并行运算(Parallel) 作者:webabcd 介绍重新想象 W ...

  5. macbook 我们需要买吗

    能否写出好代码与是否使用“好”的电脑是没有直接关系的.

  6. Maven创建webapp(二)

    这一节将记录在myeclipse下用maven创建一个简单的webapp项目 web开发maven仓库自动添加组件,故需要需要保持网络的通畅. 打开myeclipse  -->  File  - ...

  7. Java中处理异常throw和throws

    1.首先我们来了解什么是异常呢? 异常阻止当前方法或作用域继续执行的问题. 2.处理异常 说到处理异常,我们当然会想到 try catch finally 在java中我们会对异常的处理有更高的认识 ...

  8. HTML Jquery

    在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...

  9. XML的文档声明

    1.XML的文档声明 <?xml version="1.0" encoding="utf-8"?> 文档声明必须写在第一行第一列 属性: versi ...

  10. Microsoft Dynamics CRM 2013 CD-KEY

    Microsoft Dynamics CRM Workgroup Server 2013 (5 CAL limit):NX77Y-BTBCV-JP3T3-8W7JH-94QJP Microsoft D ...