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 ...
随机推荐
- gdb调试动态链接so
http://blog.csdn.net/weed_hz/article/details/12710429 gdb) file <你的exe>(gdb) load <你的so> ...
- ARCGIS做好的模型工具,已经设置为相对路径,拷贝后工具显示叉叉不可用的原因
.用户遇到此问题的场景: 用ModelBuilder构建了一系列的模型,其中有些模型很复杂,就把部分抽离出来,然后再整合到一起,我发现把整个模型工具箱拷贝到其他电脑上,这些复杂模型(里面除了系统自带的 ...
- Python3 与 C# 并发编程之~ Net篇
NetCore并发编程 示例代码:https://github.com/lotapp/BaseCode/tree/master/netcore/4_Concurrency 先简单说下概念(其实之前也有 ...
- Visual Studio 2015编译Lua 5.3.4遇到的坑
被坑的不浅,遇到错误:" LNK1561:必须定义入口点",解决方案删除再建,步骤一遍一遍操作,还是报错.如下图所示: 首先,它必须要改成DLL或者LIB(动态/静态库),如果是应 ...
- KADEMLIA算法
一.概述 基于异或距离算法的分布式散列表(DHT), 实现了去中心化的信息存储于查询系统: Kademlia将网络设计为具有160层的二叉树,树最末端的每个叶子看作为节点,节点在树中的位置由同样是16 ...
- Android 6.0 动态权限申请注意事项
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/uana_777/article/details/54136255 Part One 权限区分 And ...
- Spring Boot系列——7步集成RabbitMQ
RabbitMQ是一种我们经常使用的消息中间件,通过RabbitMQ可以帮助我们实现异步.削峰的目的. 今天这篇,我们来看看Spring Boot是如何集成RabbitMQ,发送消息和消费消息的.同时 ...
- Introducing DataFrames in Apache Spark for Large Scale Data Science(中英双语)
文章标题 Introducing DataFrames in Apache Spark for Large Scale Data Science 一个用于大规模数据科学的API——DataFrame ...
- iScroll的使用
CDN: <script src="//ossweb-img.qq.com/images/js/iscroll_library/iscroll-5.2.0.js">&l ...
- VBA二次学习笔记(1)——文件操作
说明(2018-9-1 11:20:46): 1. 上班三个月了,累的一逼,真的是钱少事多离家远,每天早上六点起,晚上八点回.哎,少壮不努力啊! 2. 三个月没写博客了,上一篇已经是5.29的了,真的 ...