ZOJ3526【缩点思想】

本文介绍了一种通过分析特定类型的图来判断其是否构成环的方法。重点在于如何根据节点类型(A、C、G)和它们之间的连接关系进行分类讨论,并提出两种解决策略:一种是直接分类法,另一种是深度优先搜索(DFS)法。通过有效减少图中节点数量来确保算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一开始做的时候(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?复杂度还是可以的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值