博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-2513 Colored Sticks 字典树,欧拉回路
阅读量:6371 次
发布时间:2019-06-23

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

这题用map就超时了,所以用字典树来优化,第一次写静态的,现在都不习惯用指针了。

由于这里不要回到源点,所以不许要所有点的度都为偶数,零个或者两个均可,图也必须是连通的。

代码如下:

#include 
#include
#include
#include
using namespace std;char s1[15], s2[15];int idx = 0, flag = 0, ptr = 1;int set[2500005];struct Node{ int cnt, No; int ch[26];}e[1250005];int find(int x){ return set[x] = x == set[x] ? x : find(set[x]);}int insert(int p, char *in){ if (*in == '\0') { if (e[p].cnt == 0) { e[p].No = ptr++; } ++e[p].cnt; if (e[p].cnt & 1) { ++flag; } else { --flag; } return find(e[p].No); } else { if (e[p].ch[*in-'a'] == 0) { ++idx; e[p].ch[*in-'a'] = idx; } insert(e[p].ch[*in-'a'], in+1); }}int main(){ int x, y, root = 0; for (int i = 0; i <= 2500000; ++i) { set[i] = i; } while (scanf("%s %s", s1, s2) == 2) { x = insert(0, s1); y = insert(0, s2); if (x != y) { set[x] = y; } } for (int i = 1; i < ptr; ++i) { if (set[i] == i) { ++root; } } if (ptr == 1 || (flag == 0 || flag == 2) && root == 1) { puts("Possible"); } else { puts("Impossible"); } return 0;}

转载地址:http://qeuqa.baihongyu.com/

你可能感兴趣的文章
Python中的图形库
查看>>
Linux操作系统分析 ------------------中国科技大学
查看>>
Apache多站点实现原理和配置
查看>>
javascript类型系统——包装对象
查看>>
Android4.4中不能发送SD卡就绪广播
查看>>
解决:sudo: 无法解析主机:dinphy-500-310cn: 连接超时
查看>>
Asp.Net多线程用法1
查看>>
exFAT是支持Mac和Win的
查看>>
(转)postman中 form-data、x-www-form-urlencoded、raw、binary的区别
查看>>
js Date操作
查看>>
判断用户密码是否在警告期内(学习练习)
查看>>
sp_executesql的执行计划会被重用(转载)
查看>>
禅道项目管理软件插件开发
查看>>
Linux系统各发行版镜像下载
查看>>
JS获取键盘按下的键值event.keyCode,event.charCode,event.which的兼容性
查看>>
查看ORACLE 数据库及表信息
查看>>
腾讯、百度、阿里面试经验—(1) 腾讯面经
查看>>
Codeforces Round #374 (Div. 2) D. Maxim and Array 贪心
查看>>
HTML DOM 教程Part1
查看>>
GBDT的基本原理
查看>>