Codeforces Round #626 (Div. 2) E. Instant Noodles(二分图,最大公因数)
题意:
给你一个二分图,求左侧端点的所有可能子集中的点相连的右侧端点的权值的和的最大公因数。
题解:
若所有右侧端点均不在同一左侧子集中,则求所有权值的最大公因数即可 。
否则,将在相同左侧子集中的右侧权值合并,求合并权值与其余权值的最大公因数。
证明 :
$gcd(a,a+b)=gcd(a,b),gcd(a,b,c)=gcd(a,gcd(b,c)) 。$
Tips:
| Time Limit | 2s |
| ios::sync_with_stdio(false) + cin.tie(nullptr) + cout.tie(nullptr) + & | 1965ms |
| scanf | 1622ms |
| scanf + & | 655ms |
简直是降维打击
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; vector<pair<vector<int>,ll>> v; bool cmp(pair<vector<int>,ll> & a,pair<vector<int>,ll> & b){//对每个右端点所在的左侧子集排序
if(a.first.size()!=b.first.size())
return a.first.size()<b.first.size();
else
return a.first<b.first;
} void solve(){
int n,m;scanf("%d%d",&n,&m); v.clear();
v.resize(n); for(int i=0;i<n;i++)
scanf("%lld",&v[i].second);
for(int i=0;i<m;i++){
int a,b;scanf("%d%d",&a,&b);
--a,--b;
v[b].first.push_back(a);
} for(int i=0;i<n;i++)
sort(v[i].first.begin(),v[i].first.end());
sort(v.begin(),v.end(),cmp); ll ans=0; int i=0;
while(v[i].first.empty()) i++;//跳过空子集
while(i<n){
int j=i;
ll sum=0;
while(j<n&&(v[i].first==v[j].first)){//合并权值
sum+=v[j].second;
++j;
}
ans=__gcd(ans,sum);
i=j;
} printf("%lld\n",ans);
} int main(){
int t;scanf("%d",&t);
while(t--)
solve();
return 0;
}
Codeforces Round #626 (Div. 2) E. Instant Noodles(二分图,最大公因数)的更多相关文章
- Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)
A. Even Subset Sum Problem 题意 给出一串数,找到其中的一些数使得他们的和为偶数 题解 水题,找到一个偶数或者两个奇数就好了 代码 #include<iostream& ...
- Codeforces Round #626 (Div. 2)
Contest Info Practice Link Solved A B C D E F 4/6 O Ø Ø Ø Ø - O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 S ...
- Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)部分(A~E)题解
(A) Even Subset Sum Problem 题解:因为n非常非常小,直接暴力枚举所有区间即可. #include<bits/stdc++.h> using namespace ...
- Codeforces Round #626 (Div. 2) D. Present(位运算)
题意: 求n个数中两两和的异或. 思路: 逐位考虑,第k位只需考虑0~k-1位,可通过&(2k+1-1)得到一组新数. 将新数排序,当两数和在[2k,2k+1)和[2k+1+2k,2k+2)之 ...
- Codeforces Round #626 Div2 D,E
比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
随机推荐
- JavaScript DOM编程艺术(第2版)的简单总结
介绍 JavaScript DOM编程艺术(第2版)主要讲述了 JavaScript.DOM 和 HTML5 的基础知识,着重讲述了 DOM 编程,并通过几个实例演示了具有专业水准的网页开发. 下面介 ...
- 【Java基础】面向对象下
面向对象下 这一章主要涉及其他关键字,包括 this.super.static.final.abstract.interface.package.import 等. static 在 Java 类中, ...
- 【C++】《C++ Primer 》第十章
第十章 泛型算法 一.概述 因为它们实现共同的操作,所以称之为"算法".而"泛型",指的是它们可以操作在多种容器类型上. 泛型算法并不直接操作容器,而是遍历由两 ...
- Flutter 布局类组件:线性布局(Row和Column)
前言 所谓线性布局,即指沿水平或垂直方向排布子组件.Flutter中通过Row和Column来实现线性布局,并且它们都继承自弹性布局(Flex). 接口描述 Row({ Key key, // 表示子 ...
- Azure Terraform(四)状态文件存储
一,引言 我们都知道在执行部署计划之后,当前目录中就产生了名叫 "" 的 Terraform 的状态文件,该文件中记录了已部署资源的状态.默认情况下,在执行部署计划后,Terraf ...
- 使用 C# 9 的records作为强类型ID - JSON序列化
在本系列的上一篇文章中,我们注意到强类型ID的实体,序列化为 JSON 的时候报错了,就像这样: { "id": { "value": 1 }, "n ...
- redis之集群一:主从
Redis的三种集群模式 Redis有三种集群模式,第一个就是主从模式,第二种"哨兵"模式,第三种是Cluster集群模式,第三种的集群模式是在Redis 3.x以后的版本才增加进 ...
- CTFshow萌新赛-web签到
打开靶机 查看页面信息 可以看到有一个system函数 在Linux中可以使用":"隔离不同的语句 payload如下 https://5105c8b6-83aa-4993-91b ...
- linux DRM GPU scheduler 笔记
内核文档: Overview The GPU scheduler provides entities which allow userspace to push jobs into softw ...
- HTML&CSS:构建网站不能不说的那些事儿
很高兴你能看到这个专栏!俗话说得好,相逢即是缘分,没准你和我在上一世也曾有过五百次的回眸,才得此一面.说的有点恶心了,咱还是书归正传,说说这个专栏吧. 这个专栏主要讲的是 HTML 和 CSS 的页面 ...