给定共$2n$个点,$m$条边的二分图。右部的每个点都有一个权值,现规定$𝑆$为左部点的任意子集,$𝑁(𝑆)$为与$𝑆$中的点直接相连的右部点集。$𝑓(𝑆)$为𝑆中所有点权值之和。要求所有$𝑓(𝑁(𝑆))$的$gcd$。
假设$1$连了$a_1,a_2$。$2$连了$a_1,a_3$
$gcd=gcd(a_1+a_2+a_3,a_1+a_3,a_1+a_2)=gcd(a_1,a_2,a_3)$
假设$1$连了$a_1,a_2,a_3$。$2$连了$a_1,a_3,a_4$
$gcd=gcd(a_1+a_2+a_3+a_4,a_1+a_3+a_2,a_1+a_3+a_4)=gcd(a_1+a_3,a_2,a_4)$
如果有右边的点$i$和$j$所链接的点集相同。那么$i,j$不可能在算$gcd$拆开来,变成一个整体$a_i+a_j$。
只要把右边连左边点集相同的点看成一个。这样$gcd$就是所有独立的点之后的$gcd$
判断是否点集相同可以用神奇的1
map<vetor<int>,int>
代码
1 |
|
</details>