简单的关系并查集一般很容易根据给出的关系搞出一个有向的环,那么两者之间的关系就变成了两者之间的距离。
对于此题:
若u,v不在一个集合内,则显然此条语句会合法(暂且忽略后两条,下同)。
那么将fu 变为 fv的儿子时需加一条权值为 w 的边,w 满足(w + ru)%3 = (rv+ (D == 1? 0 : 1))%3(ru,rv分别为u,v与fv的关系,即距离)。
之所以在D == 2时加 1,是因为u吃v表明着u到fv的距离比v到fv的距离大1。
同理,D == 1时,表明两者到fv的距离应该相等。
若u,v在一个集合内,只需要判断ru%3 == (rv+(D == 1?):1))%3 是否成立即可。
不过这个题数据略坑啊,写成多组输入的根本过不了。
#include
#include
#include
#include
#include
#include
#include
#include
#include