POJ 1386 有向图欧拉通路
2024-08-22 15:57:47
题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) 。然后问你是否可以全部连起来。
思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉通路的性质,可以求出是否可以组成欧拉通路 。
当然还得考虑一下这个图是否是连通图,这里可以用并查集记录边的集合。最后判断是否是一个连通图。
欧拉通路水题。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define clr(a) memset(a , 0 , sizeof(a) )
using namespace std ; char a[1111] ;
struct kdq{
int s, e ;
}al[111111] ;
int in[30] ,out[30] ;
bool vis[30] ; int fa[30] ;
int find(int x){
return fa[x] == x ? x : fa[x] = find(fa[x]) ;
} void Union(int a, int b){
a = find(a) ;
b = find(b) ;
if(a == b)return ;
if(a < b)fa[b] = a ;
else fa[a] = b ;
} void init(){
for (int i = 0 ; i <= 26; i ++ )fa[i] = i ;
clr(in) ;
clr(out) ;
clr(vis) ;
} int main(){
int T ;
cin >> T ;
while( T -- ){
int n ;
cin >> n ;
init() ; for (int i = 1 ; i <= n ; i ++ ){
scanf("%s",a) ;
int l = strlen(a) ;
al[i].s = a[0] - 'a';
al[i].e = a[l - 1] - 'a';
in[a[0] - 'a'] ++ ;
out[a[l - 1] - 'a'] ++ ;
vis[a[0] - 'a'] = 1 ;
vis[a[l - 1] - 'a'] = 1 ;
}
for (int i = 1 ; i <= n ; i ++ ){
int u = al[i].s ;
int v = al[i].e ;
Union(u , v) ;
}
int jihe = -1 ;
bool flag = 0 ;
for (int i = 0 ; i < 26 ; i ++ ){
if(!vis[i])continue ;
if(jihe == -1){
jihe = find(i) ;
}
else if(find(i) != jihe){
flag = 1 ;
break ;
}
}
int num = 0 ;
for (int i = 0 ; i < 26 ;i ++ ){
if(!vis[i])continue ;
if(abs(in[i] - out[i]) >= 2){
flag = 1 ;
break ;
}
else if(abs(in[i] - out[i]) == 1){
num ++ ;
}
}
if(flag){
puts("The door cannot be opened.") ;
}else
if(num == 0 || num == 2 ){
puts("Ordering is possible.") ;
}else {
puts("The door cannot be opened.") ;
}
}
return 0 ;
}
最新文章
- java IO流 Zip文件操作
- hdu5033 Building (单调栈+)
- MongoDB学习笔记四:索引
- linux下查找某个目录下包含某个字符串的文件
- 配置tomcat,java运行环境
- logback日志文件需要注意点
- python request的运用
- POJ 1840 Brainman(逆序对数)
- Entity Framework入门教程:什么是Entity Framework
- 阿里云ecs遭到频繁的ddos攻击始末
- [Swift]LeetCode731. 我的日程安排表 II | My Calendar II
- mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
- jQuery-动画点击淡化消失
- MVC中修改Table值
- POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
- 微信小程序FAQ
- HDU2577 How to Type 2016-09-11 14:05 29人阅读 评论(0) 收藏
- leetcode之Maximal Square
- Python :集合类型(set)
- [LeetCode 题解]: Triangle