题意
给出一张无向图,但是所有数字都由?代替(也即是说,你只知道每条边连接的两个点的标号的位数)
问你这可不可能是棵树
n<=200000
题解
我们将每个位数相同的点中挑一个点出来称为关键点
那么一个显而易见的结论是,所有树,都可以在不改变那个所有数字都由?代替后的结果的前提下,转变成一个关键树然后加一大堆叶子的形式(即去掉关键点,连通块大小都是1)
然后我们考虑这个怎么实现
首先爆搜关键树的形态,6^4
然后就是建模啦
以样例1,12个点,7个?-?,3个?-??,1个??-??为例
从左到右记为S A B T
源点流出A的是该类型的边的数量,然后A向所连接的B连INF的边,然后B向T连的是这种点的数量(减去了关键点)
如果u<->v所对应的A向代表u的B有1流量(或者说反向边有容量),就意味着存在一个u->v的条边,v同理
这是初始图,但是每次我们枚举了树的形态后,S->A的对应的边的容量是要同时改变的,然后我们就在改变后的图上跑网络流,如果满流,就可以输出答案了。输出答案的原理就是看AB间的边的反向边有多少容量
以上。