判断无向图是否存在欧拉回路,就是看度数为奇数的点有多少个,如果有两个,那么以那分别两个点为起点和终点,可以构造出一条欧拉回路,如果没有,就任意来,否则,欧拉回路不存在。

首先用并查集判断连通,然后统计度数。

#include<cstdio>
#include<cstring>
#include<vector>
//#include<algorithm>
//#define local
using namespace std; const int maxl = ;
const int maxn = 1e3 + ;
int p[maxl];
bool used[maxl];//出现过的字符 char s[maxn]; int Find(int x) {return p[x] == x ? x : p[x] = Find(p[x]); } char last(char *p)
{
while(*(++p));
return *(p-);
} int deg[maxl];//出度 - 入度
#define ID(c) (c-'a')
int main()
{
#ifdef local
freopen("in10129.txt","r",stdin);
#endif // local
int T,N;
scanf("%d",&T);
while(T--) {
memset(used,false,sizeof(used));
memset(deg,,sizeof(deg));
int cc = ;
for(int i = ; i < maxl; i ++) { p[i] = i; }
scanf("%d", &N);
while(N--){
scanf("%s",s);
int u = ID(*s), v = ID(last(s));
deg[u]++; deg[v]--;
used[u] = used[v] = true;
int s1 = Find(u), s2 = Find(v);
if(s1 != s2) {
p[s1] = s2; cc--;
}
}
bool ok = false;
for(int i = ; i < maxl; i ++) {
if(!used[i]) cc--;
}
int odd[maxl] = {},top = ;
if(cc == ){
for(int i = ; i < maxl; i ++) if(deg[i]) {
odd[top++] = deg[i];
}
if(top == && (odd[] == || odd[] == ) ) ok = true;//入度sum = 出度sum
else if(top == ) ok = true;
}
if(ok) printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
return ;
}

最新文章

  1. Account Team使用说明
  2. 伯克利包过滤(Berkeley Packet Filter,BPF)语言
  3. Delphi 字符数组存入文件
  4. android 事件处理概念簇
  5. .net学习笔记----Asp.net的生命周期之一应用程序生命周期
  6. 第一个Sprint冲刺第三天
  7. angularjs $watch demo
  8. ECSHOP在线手册之模板结构说明 (适用版本v2.7.3)
  9. 高质量PHP代码的50个实用技巧必备(上)
  10. Android 6.0出现的init: cannot execve(‘XXX’):Permission denied问题:禁止SELINUX的权限设置
  11. WPF使用CefSharp嵌入网页
  12. 移动端web开发的注意点大总结
  13. Android-Nexus5-命令刷机
  14. java使用RunTime调用windows命令行
  15. 爬虫----模拟用户登录gitHub
  16. MQTT协议
  17. BZOJ1552[Cerc2007]robotic sort&amp;BZOJ3506[Cqoi2014]排序机械臂——非旋转treap
  18. Selenium基础知识(九)验证码
  19. jquery事件及插件
  20. SpringBoot2 【关于:Table &#39;XXX.hibernate_sequence&#39; doesn&#39;t exist】

热门文章

  1. MySQL写入中文乱码
  2. vb常用命名空间
  3. GROUP BY 子句 和 ORDER BY子句连用注意
  4. CentOS 安装配置vncserver
  5. 51nod1105(二分)
  6. [Swift]LeetCode1078. Bigram 分词 | Occurrences After Bigram
  7. iOS 隐藏百度地图SDK的百度LOGO
  8. Mybatis Plugin(拦截器)的开发
  9. 关于Django查询知识点总结
  10. python进阶12 Redis