题解 CF1322C 【Instant Noodles】
inf计划第三题,评分2300,未看题解
这道题是@Fee_cle6418推荐的
(改编后)有
n 个X 部点,每个点有一个匹配Y 部点集合c_i (这样说主要是那个二部图没什么意思),求\gcd_{S\subseteq U}\left\{\sum_{x\in f_S}x\right\} 其中
f_S=\bigcup\limits_{x\in S}c_i
理解一下就是求对于任意点集匹配到的所有位置的和再求
我一开始一直想怎么从
因此从
考虑一个老结论
在说什么呢,其实是说原本有一些集合(匹配点的并集的和)有一样的贡献,然后考虑上一个新的
非常弱智但我想了一会儿,其实在说对
则仅仅对于
所以步骤就是求出
n=read(),m=read(),ans=0;
while(m--)x=read(),y=read(),h[y]+=v[x];
for(i=1;i<=n;++i)if(h[i])mp[h[i]]+=a[i];
for(auto x:mp)ans=__gcd(ans,x.second);