hdu 1116 并查集和欧拉路径
---恢复内容开始---
把它看成是一个图
只是需要欧拉路径就可以了 首尾能连成一条线即可
如果要判断这个图是否连通 得用并查集
在hrbust oj里面看答案学到的方法 不用各种for循环套着判断能否循环
只需要在union的时候做做调整 让比较大的父亲节点的父亲节点等于小的父亲节点 向1靠拢就可以
但是在这里面 是向出现过的最小的字母的排序靠拢 所以要记录
而且for循环26个字母的时候 只对出现过的字母做判断它是否与最小的字母可以连通
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- #include<map>
- using namespace std;
- int ru[30];
- int chu[30];
- int fa[30];
- int vis[30];
- void init()
- {
- for(int i=1;i<=26;i++)
- {
- ru[i]=0;
- chu[i]=0;
- fa[i]=i;
- vis[i]=0;
- }
- }
- int find(int i)
- {
- return fa[i]==i?i:find(fa[i]);
- }
- void un(int a,int b)
- {
- int aa=find(a);
- int bb=find(b);
- if(aa>bb)
- fa[aa]=bb;
- else fa[bb]=aa;
- }
- int main(){
- int t;
- scanf("%d",&t);
- while(t--)
- {
- int n;
- scanf("%d",&n);
- char s[2000];
- init();
- int minn=26;
- for(int i=0;i<n;i++)
- {
- scanf("%s",s);
- int a=s[0]-'a'+1;
- int len=strlen(s);
- int b=s[len-1]-'a'+1;
- chu[a]++;
- ru[b]++;
- un(a,b);
- vis[a]++;
- vis[b]++;
- if(a<minn)
- minn=a;
- if(b<minn)
- minn=b;
- }
- int yi=0;
- int er=0;
- int san=0;
- bool ok=true;
- for(int i=1;i<=26;i++)
- {
- if(ru[i]==chu[i])
- yi++;
- else if(ru[i]==chu[i]+1)
- er++;
- else if(ru[i]==chu[i]-1)
- san++;
- if(vis[i]!=0)
- {
- if(find(i)!=minn)
- ok=false;
- }
- }
- if(yi==24&&er==1&&san==1&&ok==true)
- printf("Ordering is possible.\n");
- else if(yi==26&&ok==true)
- printf("Ordering is possible.\n");
- else printf("The door cannot be opened.\n");
- }
- }
---恢复内容结束---
hdu 1116 并查集和欧拉路径的更多相关文章
- hdu 1116(并查集+欧拉路径)
Play on Words Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- hdu 1116 Play on Words 欧拉路径+并查集
Play on Words Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 1116 Play on Words(欧拉路径(回路))
http://acm.hdu.edu.cn/showproblem.php?pid=1116 题意:判断n个单词是否可以相连成一条链或一个环,两个单词可以相连的条件是 前一个单词的最后一个字母和后一个 ...
- hdu 1116 并查集判断欧拉回路通路
判断一些字符串能首尾相连连在一起 并查集求欧拉回路和通路 Sample Input 3 2 acm ibm 3 acm malform mouse 2 ok ok Sample Output The ...
- HDU 1116 Play on Words(并查集和欧拉回路)(有向图的欧拉回路)
Play on Words Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- Play on Words HDU - 1116 (并查集 + 欧拉通路)
Play on Words HDU - 1116 Some of the secret doors contain a very interesting word puzzle. The team o ...
- hdu 4514 并查集+树形dp
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- UVa 10129 Play on Words(并查集+欧拉路径)
题目链接: https://cn.vjudge.net/problem/UVA-10129 Some of the secret doors contain a very interesting wo ...
- HDU 3926 并查集 图同构简单判断 STL
给出两个图,问你是不是同构的... 直接通过并查集建图,暴力用SET判断下子节点个数就行了. /** @Date : 2017-09-22 16:13:42 * @FileName: HDU 3926 ...
随机推荐
- python为什么有私有方法和变量
1. 访问安全,其实也没有决定的安全 >>> class humer(object): ... def __init__(self, name): ... self.name = n ...
- .net学习笔记----二级域名站点共享Session状态
前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态, http://www.cnblogs.com/jzywh/archive/2007/0 ...
- Maven使用笔记(四)pom.xml配置详解
pom.xml文件配置详解 --声明规范 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- oracle 10g 学习之客户端安装和配置(2)
概述 Oracle 数据库是一种网络上的数据库, 它在网络上支持多用户, 支持服务器/客户机等部署(或配置) 服务器与客户机是软件概念, 它们与计算机硬件不存在一一对应的关系. 即: 同一台计算机既可 ...
- Android APK反编译详解(附图)(转)
这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件, ...
- MS SQL SERVER 2000 常用 Tran-SQL 语句
一.创建数据库:create database mydb-创建数据库mydbon primary-在primary文件组中( name = mydb_data1,filename = 'd:\sql ...
- tcp的三次握手及四次挥手(连接与中断流程)
连接的三次握手: 1握.client向server发送连接请求,发送的报文是:syn=1,seq number=生成的随机数x . 这时client的状态是SYN_SEND 2握.server从sy ...
- calendar 示例
package unit5; import java.text.DateFormatSymbols; public class MyMonth { private int month; private ...
- 使用egypt+graphviz生成函数调用关系图示例
总结: make (-fdump-rtl-expand) 去除编译优化,比如-O3 egypt test.c.128r.expand >test.dot 可以手动打开dot文件去除一些孤立 ...
- WPF/Silverlight HierarchicalDataTemplate 模版的使用(转)
上一篇 对Wpf/Silverlight Template 进行了总结,本篇继续上一篇,主要是介绍 HierarchicalDataTemplate 的使用方法.HierarchicalDataTem ...