一、题目
二、解法
首先要考虑没有修改的情况,这个t到达s
好像是关于联通性的问题,不妨考虑并查集。
考虑这个路径上只会是两种形式: 1 , 2 1,2 1,2类边->
3 3 3类边->
1 1 1类边,或者是只经过 1 , 2 1,2 1,2类边。我们不妨维护一个 1 1 1类边并查集, 1 , 2 1,2 1,2类边并查集(称为 1 1 1并查集和 2 2 2并查集),连通性代码如下:
int connect(int a,int b)
{
return yi.find(a)==yi.find(p[er.find(b)])//b去找a
|| er.find(p[yi.find(a)])==er.find(b)//a去找b, 是为了处理不同深度关系的a,b
|| er.find(a)==er.find(b);//一个2联通内
}
询问的话我们找到当前点的 1 1 1联通,首先这个联通块内是可以到达的,然后我们考虑经过三类边到达 2 2 2联通,那我们就需要维护一个 s o n [ x ] son[x] s