Codeforces 1322C - Instant Noodles(数学)
题意
给出一个二分图, 两边各 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";
}
}
Codeforces 1322C - Instant Noodles(数学)的更多相关文章
- Codeforces Round #626 (Div. 2) E. Instant Noodles(二分图,最大公因数)
题意: 给你一个二分图,求左侧端点的所有可能子集中的点相连的右侧端点的权值的和的最大公因数. 题解: 若所有右侧端点均不在同一左侧子集中,则求所有权值的最大公因数即可 . 否则,将在相同左侧子集中的右 ...
- CodeForces 534C Polycarpus' Dice (数学)
题意:第一行给两个数,n 和 A,n 表示有n 个骰子,A表示 n 个骰子掷出的数的和.第二行给出n个数,表示第n个骰子所能掷出的最大的数,这些骰子都有问题, 可能或多或少的掷不出几个数,输出n个骰子 ...
- codeforces 687B - Remainders Game 数学相关(互质中国剩余定理)
题意:给你x%ci=bi(x未知),是否能确定x%k的值(k已知) ——数学相关知识: 首先:我们知道一些事情,对于k,假设有ci%k==0,那么一定能确定x%k的值,比如k=5和ci=20,知道x% ...
- Codeforces Gym 100269G Garage 数学
Garage 题目连接: http://codeforces.com/gym/100269/attachments Description Wow! What a lucky day! Your co ...
- Codeforces C. Almost Equal (数学规律)
题目链接:http://codeforces.com/contest/1206/problem/C 题解 : 观察可以发现当n为偶数时,1 - 2n是不满足题意的,可以举例n = 2,n = 4试一试 ...
- codeforces 101C C. Vectors(数学)
题目链接: C. Vectors time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Educational Codeforces Round 15 D 数学推公式
D. Road to Post Office time limit per test 1 second memory limit per test 256 megabytes input standa ...
- CodeForces 589D Boulevard (数学,相遇)
题意:给定 n 个的在 x 轴上的坐标,和开始时间,结束坐标,从起点向终点走,如果和其他人相遇,就互相打招乎,问你每人打招乎的次数. 析:其实这一个数学题,由于 n 比较小,我们就可以两两暴力,这两个 ...
- Codeforces 311D Interval Cubing 数学 + 线段树 (看题解)
Interval Cubing 这种数学题谁顶得住啊. 因为 (3 ^ 48) % (mod - 1)为 1 , 所以48个一个循环节, 用线段树直接维护. #include<bits/stdc ...
随机推荐
- 7-6 jmu_python_最大公约数&最小公倍数 (10 分)
本题要求从键盘输入两个整数(以逗号间隔),编程求出这两个数的最大公约数和最小公倍数 提示:求最大公约数可用辗转相除法,最小公倍数用两数的积除以最大公约数 输入格式: 在一行中输入两个整数,以逗号间隔 ...
- 与Nexus为Maven搭建私服
目录 Nexus 的概述 Nexus 安装与部署 Nexus 在 Windows 上安装与使用 安装 使用 Nexus 在 Linux 上安装与使用 Nexus 的概述 引用百度百科一段话 Nexus ...
- linux-TFTP服务
1.TFTP协议简介TFTP,全称是 Trivial File Transfer Protocol(简单文件传输协议),基于 UDP 实现,该协议简单到只能从远程服务器读取数据或向远程服务器上传数据. ...
- 初识JVM:(一)JVM工作原理和流程
本文主要参考:http://blog.csdn.net/CSDN_980979768/article/details/47281037?locationNum=7&fps=1 声明:主要用于个 ...
- kafka集群搭建及结合springboot使用
1.场景描述 因kafka以前用的不多,只往topic中写入和读取过数据,这次刚好又要用到,记录下kafka集群搭建及结合springboot使用. 2. 解决方案 2.1 简单介绍 (一)关于kaf ...
- Spark入门(一)--用Spark-Shell初尝Spark滋味
Spark-Shell的使用 执行scala命令的spark-shell 进入spark的sbin目录,打开键入 ./spark-shell 即可进入spark-shell的目录 spark-shel ...
- centeos安装Anconda3
步骤: #获取安装包 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.s ...
- ZooKeeper原理解析
目录 ZooKeeper中的各种角色 ZooKeeper与客户端 Zookeeper节点数据操作流程 Paxos 算法概述(ZAB 协议) ZooKeeper 的选主机制 选择机制中的概念 选举消息内 ...
- this.baseInfoList = [...this.baseInfoList] 所有和数组有关的操作,最后一定都展开一次,否则就没有双向绑定!!
this.baseInfoList = [...this.baseInfoList] 所有和数组有关的操作,最后一定都展开一次,否则就没有双向绑定!! this.baseInfoList = [... ...
- Checkbox 勾上 不让勾下 同步手动刷新复选框状态 iview
<Checkbox v-show="!disabledForm" ref="youwubianhuaRef" :value="youwubian ...