R 544
F2: 什么dfs根本不会啊,只会瞎贪心。。。
我们考虑先连哪些边,对于u,v两个点,如果u,v所在的联通块都与1相连的话,那我们肯定先不连这种边吧。
因为太亏了啊。。。
总而言之我们要在不影响答案的情况下,与1相关的边我们要尽可能地扔到后面。
那么我们可以先把1拿出来,连来连去变成一片森林,然后我们再在森林之间连来连去,最后去连1.
dfs代码看不懂啊。。怎么十几行就没了啊。。这是什么东西啊。。。
upd:看懂了。首先随便dfs一下,因为dfs是从下到上的,所以到最后与1相连的边就是最少的need,那么有解的话这个need应该小于d。
那么现在我们可以遍历一下与1直接相连的点,如果这个点跟其他的点连了,那么我们可以把这条边挪到1这里来。
放一下我瞎搞的贪心代码。。。
#include <bits/stdc++.h>
#define pii pair<int,int>
#define mk(a,b) make_pair(a,b)
using namespace std;
int n,m,d;
int fa[],b[];
int find(int a){
return a==fa[a]?a:fa[a]=find(fa[a]);
}
bool unite(int x,int y){
x=find(x),y=find(y);
if(x==y)return ;
if(b[x])fa[y]=x;
else fa[x]=y;
return ;
}
int u[],v[];
vector<int> g;
vector<pii>ans;
int main(){
ios::sync_with_stdio(false);
cin>>n>>m>>d;
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=m;i++){
cin>>u[i]>>v[i];
if(u[i]==){
g.push_back(v[i]);
b[v[i]]=;
} else if(v[i]==){
g.push_back(u[i]);
b[u[i]]=;
}
}
int tot = n-;
for(int i=;i<=m;i++){
if(tot<=d)break;
int fa = find(u[i]),fb=find(v[i]);
if(b[fa]&&b[fb])continue;
if(u[i]!=&&v[i]!=&&unite(u[i],v[i])){
ans.push_back(mk(u[i],v[i]));
tot--;
}
}
for(int i=;i<=m;i++){
if(tot<=d)break;
int fa = find(u[i]),fb=find(v[i]);
if(b[fa]&&b[fb]&&u[i]!=&&v[i]!=&&unite(u[i],v[i])){
ans.emplace_back(mk(u[i],v[i]));
tot--;
}
}
for(auto x:g){
if(unite(,x))
d--,tot--,ans.push_back(mk(,x));
if(tot==||d==)
break;
}
if(tot!=){
cout<<"NO"<<endl;
} else{
cout<<"YES"<<endl;
for(auto tmp:ans){
cout<<tmp.first<<' '<<tmp.second<<'\n';
}
}
}
F1:找个最大的点,然后加边
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+;
vector<int> g[N];
int n,m,d[N],fa[N],u[N],v[N];
int find(int a){
return a==fa[a]?a:fa[a]=find(fa[a]);
}
bool unite(int x,int y){
x=find(x),y=find(y);
if(x==y)return ;
fa[x]=y;
return ;
}
vector<pair<int,int>> ans;
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=n;fa[i]=i,i++);
for(int i=;i<=m;i++){
cin>>u[i]>>v[i];
g[u[i]].push_back(v[i]);
g[v[i]].push_back(u[i]);
d[u[i]]++,d[v[i]]++;
}
int mx=,id=-;
for(int i=;i<=n;i++)
if(d[i]>mx)mx=d[i],id=i;
for(auto x:g[id]){
unite(x,id);
ans.push_back(make_pair(x,id));
}
for(int i=;i<=m;i++){
if(unite(u[i],v[i]))
ans.push_back(make_pair(u[i],v[i]));
}
for(auto x:ans)
cout<<x.first<<' '<<x.second<<endl;
}
E:考虑dp和贪心(雾),用dp[i][j]表示到第i个位置分为j组。 如果不管i那么就是 dp[i-1][j],如果管了i的话,那么一定是放到(i-5)那一组里最优吧。
然后可以先预处理一下每个数最左能放到哪。
#include <bits/stdc++.h>
using namespace std;
int n,k;
int a[],id[];
int dp[][];
int main(){
ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=;i<=n;i++){
cin>>a[i];
}
sort(a+,a++n);
for(int i=;i<=n;i++){
id[i]=lower_bound(a+,a++i,a[i]-)-a;
}
for(int i=;i<=n;i++){
for(int j=;j<=k;j++){
dp[i][j]=max(dp[id[i]-][j-]+i-id[i]+,dp[i-][j]);
}
}
cout<<dp[n][k];
}
D:这什么啊??哪里来的数论啊,直接map存一下找个最多的不就行了吗,这范围也卡不了精度啊我看。。
#include <bits/stdc++.h>
#define rep(x) for(int i=1;i<=x;i++)
using namespace std;
typedef long double db;
int n;db a[],b[];
map<db,int>m;
int main(){
ios::sync_with_stdio(false);
cin>>n;
rep(n)cin>>a[i];
rep(n)cin>>b[i];
int ans=;
rep(n){
if(a[i]!=)
m[b[i]/a[i]]++;
else{
if(b[i]==)
ans++;
}
}
int tmp=ans;
ans=;
for(auto t:m){ans=max(ans,t.second);}
cout<<ans+tmp<<endl;
}
C:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,a[];
map<int,int> mp;
map<int,int>::iterator it;
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;i++)cin>>a[i],mp[a[i]]++;
ll ans = ;
for(it=mp.begin();it!=mp.end();it++){
ll tmp = it->second;
for(int i=;i<=;i++){
if(mp.count(it->first+i)){
tmp+=mp[it->first+i];
}
}
ans=max(ans,tmp);
}
cout<<ans;
}
B:好难。
#include <bits/stdc++.h>
using namespace std;
int n,k,x,b[];
int main(){
ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=;i<=n;i++){
cin>>x,b[x%k]++;
}
int ans = b[]/;
for(int i=;i<k;i++){
if(i==k-i) ans+=b[i]/;
else if(i<k-i)ans+=min(b[i],b[k-i]);
}
ans<<=;
cout<<ans<<endl;
}
A:
#include <bits/stdc++.h>
using namespace std;
string s,t;
void g(){cout<<setfill('')<<setw();}
int main(){
ios::sync_with_stdio(false);
cin>>s>>t;
int t1=,t2=;
t1=(s[]-'')*+(s[]-'');
t1*=;
t1+=(s[]-'')*+(s[]-'');
t2=(t[]-'')*+(t[]-'');
t2*=;
t2+=(t[]-'')*+t[]-'';
int tmp = t1+t2>>;
int res = tmp/;tmp%=;
g();
cout<<res<<':';
g();
cout<<tmp<<endl;
}
R 544的更多相关文章
- babeljs源码
babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...
- [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes
################## Rancher v2.1.7 + Kubernetes 1.13.4 ################ ##################### ...
- 利用python进行数据分析2_数据采集与操作
txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...
- Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页
{#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...
- sparklyr包:实现Spark与R的接口
日前,Rstudio公司发布了sparklyr包.该包具有以下几个功能: 实现R与Spark的连接—sparklyr包提供了一个完整的dplyr后端 筛选并聚合Spark数据集,接着在R中实现分析与可 ...
- How-to go parallel in R – basics + tips(转)
Today is a good day to start parallelizing your code. I’ve been using the parallel package since its ...
- sparklyr包:实现Spark与R的接口+sparklyr 0.5
本文转载于雪晴数据网 相关内容: sparklyr包:实现Spark与R的接口,会用dplyr就能玩Spark Sparklyr与Docker的推荐系统实战 R语言︱H2o深度学习的一些R语言实践-- ...
- R语言(入门小练习篇)
问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希 ...
- R多线程并行计算
先上代码案例: 主要的操作: library(parallel);#加载并行计算包 cl <- makeCluster(8);# 初始化cpu集群 clusterEvalQ(cl,library ...
随机推荐
- jQuery 学习01——定义、安装引用、语法、选择器及事件
什么是 jQuery ? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多"的JavaScript库. jQuery库包含以下功能: HT ...
- Win8.1/win10安装photoshop软件提示please uninstall and reinstall the product如何解决
Photoshop CS6是一款编辑图片软件,在Win8系统中安装Photoshop CS6,提示:please uninstall and reinstall the product ,该如何解决? ...
- UML建模——用例图(Use Case Diagram)
用例图主要用来描述角色以及角色与用例之间的连接关系.说明的是谁要使用系统,以及他们使用该系统可以做些什么.一个用例图包含了多个模型元素,如系统.参与者和用例,并且显示这些元素之间的各种关系,如泛化.关 ...
- SpringBoot无废话入门02:SpringBoot启动分析
1.核心注解 在上文中,我们讲到了@SpringBootApplication是SpringBoot的核心注解. 可以很方便的在idea中下载源码来查看该注解的源码,如下: 可以看到,该注解本身又被其 ...
- BLEU (Bilingual Evaluation Understudy)
什么是BLEU? BLEU (Bilingual Evaluation Understudy) is an algorithm for evaluating the quality of text w ...
- go依赖包下载加速方法及github加速
go依赖包下载加速方法及github加速 对于https://github.com/kubernetes/kubernetes整个仓库大小为近900M,下载起来那个伤心: 方法一:使用码云 这是码云上 ...
- protobuf语法指南
遇到proto编译问问,看看proto语法,记录一下 protobuf3 语法指南 http://colobu.com/2017/03/16/Protobuf3-language-guide/ htt ...
- Jetpack 架构组件 Room 数据库 ORM MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- gpg使用说明
http://blog.163.com/ywz_306/blog/static/13257711201121921452480/
- 数据中心架构ToR和EoR【总结】
1.前言 最近在看<云数据中心网络技术>,学习了企业数据中心网络建设过程,看到有ToR和EoR两种布线方式,之前没有接触过,今天总结一下. 2.布线方式 ToR:(Top of Rack) ...