博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM/ICPC 之 欧拉回路两道(POJ1300-POJ1386)
阅读量:4556 次
发布时间:2019-06-08

本文共 2274 字,大约阅读时间需要 7 分钟。

两道有关欧拉回路的例题

 


 

POJ1300-Door Man

 

//判定是否存在从某点到0点的欧拉回路//Time:0Ms	Memory:116K#include
#include
#include
using namespace std;#define MAX 25int st, n;int door[MAX];int main(){ char s[120]; while (scanf("%s", s), strcmp(s, "ENDOFINPUT")) { memset(door, 0, sizeof(door)); int doors = 0; scanf("%d%d", &st, &n); gets_s(s, 120); for (int i = 0; i < n; i++) { gets_s(s, 120); int num, k = 0; while (sscanf(s + k, "%d", &num) == 1) { doors++; door[num]++; door[i]++; while (s[k] == ' ') k++; while (s[k] && s[k] != ' ') k++; } } gets_s(s, 120); int odd = 0; for (int i = 0; i < n; i++) odd += door[i] % 2 == 1; if (odd == 0 && st == 0) printf("YES %d\n", doors); //无奇度节点 else if (odd == 2 && st && door[st] % 2 && door[0] % 2) printf("YES %d\n", doors); //两个奇度节点 else printf("NO\n"); } return 0;}

 


POJ1386-Plays on Words

 

 

//判断能否使给定的词组前后接龙//Time:344Ms	Memory:120K#include
#include
#include
using namespace std;#define MAX 28#define MAXS 1005#define MAXN 100005int n;char s[MAXS];int in[MAX], out[MAX];int fa[MAX];int find(int x){ return fa[x] < 0 ? x : find(fa[x]);}int Union(int r1, int r2){ r1 = find(r1); r2 = find(r2); if (r1 == r2) return r1; int tmp = fa[r1] + fa[r2]; if (fa[r1] > fa[r2]) { fa[r1] = r2; fa[r2] = tmp; return r2; } else { fa[r2] = r1; fa[r1] = tmp; return r1; }}int main(){ //freopen("words.in", "r", stdin); int T; scanf("%d", &T); while (T--) { memset(in, 0, sizeof(in)); memset(out, 0, sizeof(out)); memset(fa, -1, sizeof(fa)); int pa; scanf("%d", &n); while (n--) { scanf("%s", s); int i = s[strlen(s) - 1] - 'a'; int o = s[0] - 'a'; out[o]++; in[i]++; pa = Union(i, o); } int odd = 0; bool connect = true; bool A = false, B = false; for (int i = 0; i < 26; i++) { if (!in[i] && !out[i]) continue; if (pa != find(i)) { connect = false; break; } if (in[i] - out[i] != 0) { odd++; if (in[i] - out[i] == 1) A = true; if (in[i] - out[i] == -1) B = true; } } if (connect && ((odd == 2 && A && B) || odd == 0)) printf("Ordering is possible.\n"); else printf("The door cannot be opened.\n"); } return 0;}

 

转载于:https://www.cnblogs.com/Inkblots/p/5519557.html

你可能感兴趣的文章
20181227 新的目标
查看>>
HDFS写流程
查看>>
生产环境服务器环境搭建+ 项目发布
查看>>
js按条件分类json数组,并合计同组数据(一维转换为二维)
查看>>
Exp6 信息搜集与漏洞扫描
查看>>
redis4安装
查看>>
使用命令wsimport构建WebService客户端[转]
查看>>
第八遍:链接详解
查看>>
Qt5.5 使用smtp发邮件的各种坑
查看>>
js奇葩错误 字符串传递问题
查看>>
人之初,性本恶
查看>>
springboot 端口号
查看>>
使用AChartEngine画动态曲线图
查看>>
安卓项目五子棋代码详解(四)
查看>>
urllib 学习一
查看>>
bzoj4196 [Noi2015]软件包管理器——树链剖分
查看>>
kafka源码阅读环境搭建
查看>>
UI设计
查看>>
androidtab
查看>>
Windows Phone 自定义弹出框和 Toast 通知
查看>>