博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ3526【缩点思想】
阅读量:5042 次
发布时间:2019-06-12

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

一开始做的时候(TLE),A,C,G这三类作为边,然后点和点直接建边搜个环:then time BOOM!

可以发现只属于“A”类的之间都并在一起就好,同理“G”类和“C”类,那么整幅图会变成?

所以我们只需要分析三角的位置,从而就能搞出整个图是否是个环。

一种思路:

直接分类!但是要严谨。。。

1.如果只有以一个“A”类/“G”类/“C”类为交界的,举只有“A”类例子:(num["A"]+num["AG"]+num["AC"]+num["AGC"]==n),就是yes,同理得G类和C类

2.如果只有以A,G,C其中两个作为交界的,如果只有以A,G的话,那么就是num["C"]==0&&num["AG"]+num["AGC"]>=2,就是yes,同理得相同情况。
3.如果三个都存在的话:num["AG"]?1:0+num["AC"]?1:0+num["GC"]?1:0+num["AGC"]>=3就好了或者(num["AG"]>=2&&num["AC"]>=2)或者(num["AG"]>=2&&num["GC"]>=2)或者(num["AC"]>=2&&num["GC"]>=2)

OK,that's all.

第二种方法:

DFS。

关键还是这幅图,第一种方法判断似乎好像太过思维?

DFS的话注意复杂度,所以要缩小点的数量。

对于A类/C类/G类的话,只需要一个点。

对于AG,GC,AC的话,最多只需要两个,主要就是多了也没用。

对于ACG的话,最多只要三个。
所以整幅图最多1+1+1+2+2+2+3=12,2^12,当然不保险,AG/AC/GC类可以需要3个点?2^15?复杂度还是可以的。

转载于:https://www.cnblogs.com/keyboarder-zsq/p/6777397.html

你可能感兴趣的文章
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
【ASP.NET开发】菜鸟时期的ADO.NET使用笔记
查看>>
android圆角View实现及不同版本号这间的兼容
查看>>
OA项目设计的能力③
查看>>
Cocos2d-x3.0 文件处理
查看>>
全面整理的C++面试题
查看>>
Activity和Fragment生命周期对比
查看>>
OAuth和OpenID的区别
查看>>
android 分辨率自适应
查看>>
查找 EXC_BAD_ACCESS 问题根源的方法
查看>>
国外媒体推荐的5款当地Passbook通行证制作工具
查看>>
日常报错
查看>>
list-style-type -- 定义列表样式
查看>>
hibernate生成表时,有的表可以生成,有的却不可以 2014-03-21 21:28 244人阅读 ...
查看>>
mysql-1045(28000)错误
查看>>
Ubuntu 编译出现 ISO C++ 2011 不支持的解决办法
查看>>
1.jstl c 标签实现判断功能
查看>>
Linux 常用命令——cat, tac, nl, more, less, head, tail, od
查看>>