LOJ-10106(有向图欧拉回路的判断)
题目链接:传送门
思路:
(1)将每个单词视为有向路径,单词的起始字母是起始节点,末尾字母是终止节点,然后找由字母建立的有向图
是否是欧拉图或者半欧拉图。
(2)先用并查集判断是否连通,再判断入度与出度的·关系是否符合要求。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = ;
int fa[],in[],out[];
string ss[maxn];
struct Edge{
int to,next,id;
}edge[maxn*];
int vis[maxn],head[maxn],tot;
int f(int x)
{
if(fa[x]==) return x;
else return fa[x]=f(fa[x]);
}
void Init()
{
memset(fa,,sizeof(fa));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
memset(vis,,sizeof(vis));
memset(head,,sizeof(head));
tot=;
}
void add(int x,int y,int w)
{
edge[tot].to=y;
edge[tot].next=head[x];
edge[tot].id=w;
head[x]=tot++;
}
int main(void)
{
//printf("%d\n",'z'-'a'+1);
int N,i,n,j,x,y,t1,t2;
scanf("%d",&N);
while(N--){
scanf("%d",&n);
Init();
for(i=;i<=n;i++){
cin>>ss[i];
x=ss[i][]-'a'+;
y=ss[i][ss[i].length()-]-'a'+;
t1=f(x);t2=f(y);
if(t1!=t2) fa[t2]=t1;
in[y]++;
out[x]++;
add(x,y,i);
}
int fg=;
x=f(x);
for(i=;i<=n;i++){
y=ss[i][]-'a'+;
if(f(y)!=x){
fg=;break;
}
y==ss[i][ss[i].length()-]-'a'+;
if(f(y)!=x){
fg=;break;
}
} if(fg==){
int tt=,cc=;
for(i=;i<=;i++){
if(abs(in[i]-out[i])>){
tt=;break;
}
else if(abs(in[i]-out[i])==){
cc+=(in[i]-out[i]);
}
}
if(tt==&&cc==) printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
else printf("The door cannot be opened.\n");
}
return ;
}
LOJ-10106(有向图欧拉回路的判断)的更多相关文章
- bzoj 1515 [POI2006]Lis-The Postman 有向图欧拉回路
LINK:Lis-The Postman 看完题觉得 虽然容易发现是有向图欧拉回路 但是觉得很难解决这个问题. 先分析一下有向图的欧拉回路:充要条件 图中每个点的入度-出度=0且整张图是一个强连通分量 ...
- HDU 1878 欧拉回路(判断欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 题目大意:欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一 ...
- 有向图欧拉回路个数 BEST定理
有向图欧拉回路个数 BZOJ 3659 但是没有这道题了 直接贴一个别人的板子吧 欧拉回路:存在一条路径经过所有的边刚好1次 有向图欧拉回路存在充要条件:①图连通:②对于所有点都满足出度=入度 BE ...
- 算法笔记_147:有向图欧拉回路判断应用(Java)
目录 1 问题描述 2 解决方案 1 问题描述 Description In order to make their sons brave, Jiajia and Wind take them t ...
- poj 1386 Play on Words(有向图欧拉回路)
/* 题意:单词拼接,前一个单词的末尾字母和后一个单词的开头字母相同 思路:将一个单词的开头和末尾单词分别做两个点并建一条有向边!然后判断是否存在欧拉回路或者欧拉路 再次强调有向图欧拉路或欧拉回路的判 ...
- 混合欧拉回路的判断(Dinic)
POJ1637 Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7483 Accepte ...
- LOJ#10106. 「一本通 3.7 例 2」单词游戏
题目链接:https://loj.ac/problem/10106 题目描述 来自 ICPC CERC 1999/2000,有改动. 有 NNN 个盘子,每个盘子上写着一个仅由小写字母组成的英文单词. ...
- Expm 9_1 有向图中环的判断问题
[问题描述] 给定一个有向图,要求使用深度优先搜索策略,判断图中是否存在环. package org.xiu68.exp.exp9; public class Exp9_1 { //用深度优先搜索判断 ...
- POJ 2230 Watchcow(有向图欧拉回路)
Bessie's been appointed the new watch-cow for the farm. Every night, it's her job to walk across the ...
随机推荐
- 支付宝 net
- ie和dom事件流的区别
1.事件流的区别 IE采用冒泡型事件 Netscape使用捕获型事件 DOM使用先捕获后冒泡型事件 示例: 复制代码代码如下: <body> <div> <button& ...
- mysql 多个字段合并
group_concat 函数默认“,”合并 select p.id as patent_id,p.application_no,p.name,p.inventer,group_concat(pi.` ...
- for 没有作用域的说话
for i in range(10): passprint(i) 打印的结果就是9 打印的最后一次结果
- python中面向对象元类的自定义用法
面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...
- nginx测试小结
最近在工作当中需要使用nginx,就对nginx进行进一步的了解,测试. 工作需求是在微服务架构的基础上,客户端通过nginx反向代理访问服务端,确保当一个服务端出现问题时能及时切换到正 ...
- 最适合入门的Laravel中级教程(三)表单验证
做开发有个原则是永远不能信任用户输入的数据: 即便前端已经做了验证: 在后端 php 也必须要再次验证: laravel 为表单验证提供了强大且简单的方案: 创建示例路由: routes/web.ph ...
- angular中使用ckplayer播放器
原文地址:https://www.cnblogs.com/jying/p/9519557.html ,转载请说明出处. ckplayer官网:http://www.ckplayer.com 使用ckp ...
- 7za命令报错Error: xxx is not supported archive
问题: 执行7za命令时报错:Error: xxx is not supported archive 原因: 当前7za版本过低 直接执行7za可以看到当前版本: 7-Zip (A) [64] ...
- angular分页插件tm.pagination二次触发问题解决歪方案
今天在学习angularjs的分页插件时遇到了一个前端的问题,谷歌浏览器开发者模式调试的时候发现每次点击分页刷新按钮会触发两次后台请求,ajax向后台发送了两次请求,这对于强迫症患者来说是一个比较恶心 ...