题目链接

题意

给出一个二分图, 两边各 n 个点, 共 m 条边, n, m ≤ 5e5. 右边的点具有权值 \(c_i\), 对于一个只包含左边的点的点集 S, 定义 N(S) 为所有与这个点集相邻的右边的点的点集, f(S) 为这些点的权值和. 问所有可能的 f(S) 的最大公因数.

思路

考虑若干个右边的点, 如果它们对应的左边的点是一致的, 说明它们在 N(S) 中一定是同时出现, 所以把它们缩成一个点, 新权值为原来的权值和. 缩点后在再除去那些度数为 0 的点, 下面证明答案就是剩下的点的权值的 gcd. 后面提到的 \(c_i\) 是已经过上述处理的.

设此时得到的答案为 g, 答案真值为 G. 显然 g 整除所有 f(S), 得到 \(g | G\). 设 \(G = k × g\). 令所有 \(c_i\) 都除以 \(g\). 假设 \(k > 1\), 则存在一个 \(c_j\), 使得 \(k \nmid c_j\), 设所有不与该点的相邻的点构成集合 S', 左边的点全集为 U, 则 N(S') 为仅不包含点 j 的右边点集合, 因为如果还有其他点也不被包含, 这与已缩点是矛盾的. 因为 \(k | f(U), k \nmid c_j\), 所以 \(k \nmid f(U-S')\), 得出矛盾. 所以 \(k = 1, g = G\).

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inc(i, l, r) for (int i = l; i <= r; i++) const int maxn = 5e5 + 5; int t, n, m, u, v;
ll c[maxn];
vector<int> g[maxn]; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> t;
while (t--) {
cin >> n >> m;
inc(i, 0, n - 1) vector<int>().swap(g[i]);
inc(i, 0, n - 1) cin >> c[i];
inc(i, 0, m - 1) {
cin >> u >> v;
u--, v--;
g[v].push_back(u);
}
inc(i, 0, n - 1) sort(g[i].begin(), g[i].end());
vector<int> id(n);
iota(id.begin(), id.end(), 0);
sort(id.begin(), id.end(), [&](int a, int b) { return g[a] < g[b]; });
ll res = 0;
for (int i = 0, j; i < n; i = j) {
ll sum = 0;
j = i;
while (j < n && g[id[i]] == g[id[j]]) {
sum += c[id[j]];
j++;
}
if (g[id[i]].size()) res = __gcd(res, sum);
}
cout << res << "\n";
}
}

最新文章

  1. &lt;&lt;&lt; Google hack
  2. ie7下的javascript兼容
  3. [Android L]SEAndroid增强Androd安全性背景概要及带来的影响
  4. Linux Nginx(master-slave)、Apache(woker、prefork) Working Mode Research
  5. 重温WCF之数据契约和序列化(四)
  6. cocos2dx-jsb 跨语言调用及第三方集成 - 过程记录
  7. 利用COM组件IPicture读取jpg、gif、bmp图片文件数据和显示图片
  8. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(六)
  9. jquery实现锚点动画效果
  10. Android Stutio 3.0 - Gradle sync failed
  11. MongoDB 复制机制
  12. Promise (2) 原型上的方法
  13. k8s中的api server的ca证书,可以和front proxy ca证书一样么?
  14. HttpWatch入门使用教程
  15. 4G 通信模块在ARM 平台下的应用
  16. 2017ICPC南宁赛区网络赛 Minimum Distance in a Star Graph (bfs)
  17. mac 打印机无法打印
  18. 02_HBase集群部署
  19. 在visual code的debugger for chrome中调试webpack构建的项目
  20. C++ 静态数据成员和静态成员函数

热门文章

  1. PAT-字符串处理-B1006 换个格式输出整数 (15分)
  2. Python知识点 - Xpath提取某个标签,需要转换为HTML。
  3. SpringBoot入门系列(四)整合模板引擎Thymeleaf
  4. 基于sklearn的metrics库的常用有监督模型评估指标学习
  5. proteus pro 8.9 安装及汉化教程
  6. 深入学习JAVA注解-Annotation(学习过程)
  7. duid 配置监控
  8. JS中的reduce()详解
  9. python.五角星
  10. java面试汇总一