今晚看到差分约束,回想到前面做过的边权并查集、拓扑排序,感觉这三者在某些地方有相同之处,先把思考写下来,之后做题的时候再验证。
考虑这么一个模型:
给出m个关系,每个关系涉及两个量a、b,以及他们之间的关系:a在b左边(严格)或者b<a。
1、问这m个条件是否能同时满足:
①拓扑:从图论角度出发,根据偏序关系建有向图。如果某几个条件冲突,显然出现有向环(逆命题也成立)。所以可以用有向无环图一定存在拓扑序这个结论来判断图中是否有环。(离线)
②边权并查集:(在线)在线维护元素到根节点的路径长度(合并时注意谁是父节点),输入某关系时判断是否和已知关系矛盾。 (边权并查集一般主要维护纯粹的“=”的关系,划掉的思路有bug)
③差分约束:单纯的a<b+0建图显然不合适,<关系判断负环不好判断,会无限循环。但是可以转换为a<=b-1;(离线)
2、输出一种方案:
①拓扑:拓扑序上递推,只能在过程中递推还是可以在最后拓扑序上递推视情况而定。
②边权并查集:同上,,,(实践再验证)
③差分:要转换一下,,,
3、有固定的相对大小a<b+x,方案合法性:
①:拓扑:好像不是很好弄。。。
②:边权并查集:不好办,并查集更多的维护一种等于关系。。。
③:差分约束:适当转换即可。
4、a<b+x,输出方案:
①:拓扑连合法性都弄不了,别说,,,
②:并查集:不好办,并查集更多的维护一种等于关系。。。
③:差分约束:适当转换。
5、a<=b
拓扑:不好办,允许有环。
边权并查集:目前来看肯定是办不了。
差分约束:相当于模板?
6、a<=b+x:
拓扑:一般情况下有“=”的拓扑好像都办不了。
并查集:办不了,有<、>关系。
差分约束的话就是模板了。
综上所述:在类似的这些涉及变量之间关系的模型中:
拓扑一般用于严格的偏序关系:a<b;-------------------离线O(N+M)
并查集主要维护纯粹的 “=”关系(没有大于小于这种抽象的关系 -。-):a==b、a-b==x;-------------------------在线O(MlogN)
差分约束一般用于,,,好像是一种通解(纯粹等于关系除外),小于等于、大于等于的关系(a<=b+x,,,),小于或大于关系在整数域上可以转换为小于等于或者大于等于关系。----------------------离线O(k*m~n*m)
PS:
昨晚就开始想这个问题,一晚上没想清楚,中午吃完饭又想了一下,终于把目前能想到的都理清了,一边想一边写,还不知道思考的对不对或者思考的有没有意义,之后做题的时候再验证。。。