http://acm.split.hdu.edu.cn/showproblem.php?pid=1116

 #include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
const int M=;
int fa[M],vis[M],in[M],out[M],ans[M];
char ch[];
int fin(int x){
return fa[x]==x?fa[x]:fa[x]=fin(fa[x]);
}
int unin(int x,int y)
{ return fa[fin(y)]=fin(x);
}
int main()
{
int t,n,a,b;
cin>>t;
while(t--){
cin>>n;
memset(vis,,sizeof(vis));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
for(int i=;i<;i++){///初始化父亲结点
fa[i]=i;
}
for(int i=;i<n;i++){
scanf("%s",ch);
a=ch[]-'a';
b=ch[strlen(ch)-]-'a';
unin(a,b);///把字符串的开头字母和结尾字母连结起来,即是把它看作是一条有向线段
out[a]++;///出度
in[b]++;///入度
vis[a]=;///标记
vis[b]=;///标记
}
for(int i=;i<;i++)
fa[i]=fin(i);///fa存储的是每个点最终的根节点
int cnt=;
for(int i=;i<;i++)
if(vis[i]&&fa[i]==i)
cnt++;
if(cnt>)///cnt大于1代表除啦根节点,还有根节点没有变的节点,那么此时代表图不连通
{ cout<<"The door cannot be opened.\n";
continue;
}
int j=;
for(int i=;i<;i++){
if(vis[i]&&out[i]!=in[i])
ans[j++]=i;
}
if(j==){
cout<<"Ordering is possible.\n";///j=0代表所有点的入度等于出度,此时形成欧拉回路
continue;
}
if(j==&&((out[ans[]]-in[ans[]]==&&
in[ans[j-]]-out[ans[j-]]==)
||out[ans[j-]]-in[ans[j-]]==&&
in[ans[]]-out[ans[]]==))///此处为欧拉通路的判断,是初始节点和末尾节点的度的判断,为欧拉通路
{
cout<<"Ordering is possible.\n";
continue;
}
cout<<"The door cannot be opened.\n"; }
}

HDU1116图论的更多相关文章

  1. [leetcode] 题型整理之图论

    图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...

  2. 并查集(图论) LA 3644 X-Plosives

    题目传送门 题意:训练指南P191 分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个 ...

  3. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  4. HDU 5521 [图论][最短路][建图灵感]

    /* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...

  5. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  6. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  7. HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. Codeforces 553C Love Triangles(图论)

    Solution: 比较好的图论的题. 要做这一题,首先要分析love关系和hate关系中,love关系具有传递性.更关键的一点,hate关系是不能成奇环的. 看到没有奇环很自然想到二分图的特性. 那 ...

  9. 图论(floyd算法):NOI2007 社交网络

    [NOI2007] 社交网络 ★★   输入文件:network1.in   输出文件:network1.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 在社交网络( ...

随机推荐

  1. 05文件与IO

    这节主要学习了read.write.lseek.目录访问(opendir.readdir.closedir)这几个系统调用及其简单的应用. 一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O ...

  2. HDU2490 parade

    题目大意:一个n+1行m+1列的表格,每个格子两个数w和c,表示经过该格子的happy和体力消耗值tireness.现在从最下面任意处开始,可以向左向右向上走.但不能向下.每个格子不能经过两次.在每一 ...

  3. Linux环境变量文件environment, profile, bashrc含义

    转自:http://www.th7.cn/system/lin/201508/127503.shtml (1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件 ...

  4. Screen-后台运行

    文章转自:http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html 本来想搜集资料写一个的,结果发现该博主已经总结的很好,条理清晰. ...

  5. 最小生成树算法(Prim,Kruskal)

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

  6. php的函数iconv在转"utf-8"到"gb2312"时会自动截断

    最近在写网站后台时候,需要用到iconv函数把前端jquery Post来过的utf-8编码内容转成gb2312, 发现只有用iconv函数把内容的数据一转码数据就会无缘无故的少了一部分.   问了我 ...

  7. canvas刮刮乐

    这周有点迷茫,不知道干嘛了,一天天就过去了!我在博客右侧公告栏加了qq交流,各位有好的主题,或者有趣的技术,欢迎交流!今天突发奇想,就写了2个h5 canvas的demo玩玩! demo一:刮刮乐 舍 ...

  8. SOA_环境安装系列5_Oracle ADF安装SOA Extensions(案例)

    2015-01-02 Created By BaoXinjian

  9. 关于 Code First

    第一感觉还是很新鲜的,你可以自由的控制数据结构. 比如,你想象oracle那样,给每个表增加4个字段,创建人,创建时间,更新人,更新时间.完全可以创建一个父类包含着四个属性(甚至可以把四个属性作为一个 ...

  10. 获取table的行数

    对于可扩展行的表格,有时需要不断的添加新行.注意的是,在IDE中编写table的时候,我们常常忽略tbody标签: <table style="width: 100%;"&g ...