题目链接:C. Instant Noodles
题意:给定一个二分图的右半部分和对应权值,以及全部边,对于左边部分的任意集合S,都有对应集合N(S)包含所有和集合S中相连的来自右边的点,f(S)代表N(S)中所有点权的和,现让你求所有集合S对应f(S)的最大公因数
题解:我们设集合Xi代表点i连接的左边点组成的集合,那么对于任意i,j满足Xi==Xj时,这两个点要么同时出现在某个集合N(S)中,要么同时不出现,那么我们可以利用hash映射每个右边点对应的Xi,把相同X的点缩点,因为缩点后每个点都是独立的可选或不可选,那么f(s)一定是缩点后点对应权值的自由组合,所以求所以f(s)的gcd时就相当于每个缩点后单独点权的gcd,即gcd(a,a+b+c)==gcd(a,gcd(b,c)) ,即对缩点后的每个点直接求公共gcd即可,
注意:记得特判X为空集合时
不懂和细节间代码及注释:
#include
#include
#include
#include
#include
#include
#include
#include
#include
评论列表(0条)