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连试试水的深浅..... ...
随机推荐
- Lock锁 精讲
1.为什么需要Lock 为什么synchronized不够用,还需要Lock Lock和synchronized这两个最常见的锁都可以达到线程安全的目的,但是功能上有很大不同. Lock并不是用来代替 ...
- 常见大中型网络WLAN基本业务实例
组网图形 大中型WLAN网络简介 本文介绍的WLAN网络是指利用频率为2.4GHz或5GHz的射频信号作为传输介质的无线局域网,相对于有线网络的铺设成本高,不便于网络调整和扩展.位置固定,移动性差等缺 ...
- Gradle最佳实践
一.Gradle相比Maven的优势 配置简洁 Maven是用pom.xml管理,引入一个jar包至少5行代码,Gradle只需要一行. 构建速度快 Gradle支持daemon方式运行,启动速度快, ...
- C#中的异步和多线程
许多开发人员对异步代码和多线程以及它们的工作原理和使用方法都有错误的认识.在这里,你将了解这两个概念之间的区别,并使用c#实现它们. 我:"服务员,这是我第一次来这家餐厅.通常需要4个小时才 ...
- 十四:SQL注入之类型及提交注入
简要明确参数类型 数字,字符,搜索,json等 简要明确请求方法 GET,POST,COOKIE,REQUEST,HTTP头 其中SQL语句干扰符号:' " % ) } 等,具体查看用法 非 ...
- JavaScript中的原型、原型链、原型模式
今天,咱来聊聊JavaScript中的原型跟原型链 原型跟原型模式 这一块的知识,主要是设计模式方面的. 首先,我们知道JavaScript是面向对象的.既然是面向对象,那它自然也有相应的类跟对象等概 ...
- MySQL使用SQL操作数据表的增加、修改和删除
表的修改和删除 修改 -- 修改表名称 -- ALTER TABLE 旧表名 RENAME AS 新表名 ALTER TABLE test RENAME AS test1 -- 增加表字段 -- AL ...
- 【Spring】Spring的数据库开发 - 2、Spring JdbcTemplate的常用方法(execute、update、query)
Spring JdbcTemplate的常用方法 文章目录 Spring JdbcTemplate的常用方法 execute() update() query() 简单记录-Java EE企业级应用开 ...
- postgresql中权限介绍
postgresql权限分为实例的权限,数据库的权限,模式的权限,对象的权限,表空间的权限 实例的权限:由pg_hba.conf文件控制,控制那些用户那些IP以哪种方式连接数据库 数据库的权限:是否允 ...
- Core3.1 微信v3 JSAPI支付
1.前言 "小魏呀,这个微信支付还要多久?","快了快了老板,就等着最后一步了...","搞快点哈,就等着上线呢","...... ...