SPOJ 1442 Strange Food Chain

这道题大家应该很熟悉了。。。中文名叫食物链。。
我的算法比较抽象。。我发现对于这类题目。。根本没有必要维护多个并查集。。
并查集的思想就是只要是信息能够互相推导出来的。。全部放入一个集内。。
那么无论是1操作还是2操作。。都能够互相推出其间的种类。。那么就可以合并。。
如果x的类型-y的类型=1的话x能吃y。。那么这就是一个mod 3的加法。。
对每个x,F[x]记录其父亲P[x]记录其类型-去其父亲的类型mod 3。。。
那么路径压缩的时候可以顺便算出来。。
然后写程序更加简单,x=y就是x-y=0,x吃y就是x-y=1(以上都指相对的类型号。。)。。
写的时候只要写一个就可以了。。。
附上代码
依旧发图:

2 thoughts on “SPOJ 1442 Strange Food Chain

  1. 回复gnaggnoyil:多个并查集么。。好像是对每个对象维护3个集合。。吃他的。。被他吃的。。和他一样的。。然后乱搞搞。。我也不太清楚。。从vijos上看到的。。

Leave a Reply to WJBZBMR Cancel reply

Your email address will not be published. Required fields are marked *