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的更多相关文章

  1. babeljs源码

    babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...

  2. [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  3. 利用python进行数据分析2_数据采集与操作

    txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...

  4. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  5. sparklyr包:实现Spark与R的接口

    日前,Rstudio公司发布了sparklyr包.该包具有以下几个功能: 实现R与Spark的连接—sparklyr包提供了一个完整的dplyr后端 筛选并聚合Spark数据集,接着在R中实现分析与可 ...

  6. 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 ...

  7. sparklyr包:实现Spark与R的接口+sparklyr 0.5

    本文转载于雪晴数据网 相关内容: sparklyr包:实现Spark与R的接口,会用dplyr就能玩Spark Sparklyr与Docker的推荐系统实战 R语言︱H2o深度学习的一些R语言实践-- ...

  8. R语言(入门小练习篇)

    问题: 一组学生参加了数学.科学和英语考试.为了给所有的学生确定一个单一的成绩衡量指标,需要将这些科目的成绩组合起来.另外,还想将前20%的学生评定为A,接下来20%的学生评定为B,以此类推.最后,希 ...

  9. R多线程并行计算

    先上代码案例: 主要的操作: library(parallel);#加载并行计算包 cl <- makeCluster(8);# 初始化cpu集群 clusterEvalQ(cl,library ...

随机推荐

  1. jQuery 学习01——定义、安装引用、语法、选择器及事件

    什么是 jQuery ? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多"的JavaScript库. jQuery库包含以下功能: HT ...

  2. Win8.1/win10安装photoshop软件提示please uninstall and reinstall the product如何解决

    Photoshop CS6是一款编辑图片软件,在Win8系统中安装Photoshop CS6,提示:please uninstall and reinstall the product ,该如何解决? ...

  3. UML建模——用例图(Use Case Diagram)

    用例图主要用来描述角色以及角色与用例之间的连接关系.说明的是谁要使用系统,以及他们使用该系统可以做些什么.一个用例图包含了多个模型元素,如系统.参与者和用例,并且显示这些元素之间的各种关系,如泛化.关 ...

  4. SpringBoot无废话入门02:SpringBoot启动分析

    1.核心注解 在上文中,我们讲到了@SpringBootApplication是SpringBoot的核心注解. 可以很方便的在idea中下载源码来查看该注解的源码,如下: 可以看到,该注解本身又被其 ...

  5. BLEU (Bilingual Evaluation Understudy)

    什么是BLEU? BLEU (Bilingual Evaluation Understudy) is an algorithm for evaluating the quality of text w ...

  6. go依赖包下载加速方法及github加速

    go依赖包下载加速方法及github加速 对于https://github.com/kubernetes/kubernetes整个仓库大小为近900M,下载起来那个伤心: 方法一:使用码云 这是码云上 ...

  7. protobuf语法指南

    遇到proto编译问问,看看proto语法,记录一下 protobuf3 语法指南 http://colobu.com/2017/03/16/Protobuf3-language-guide/ htt ...

  8. Jetpack 架构组件 Room 数据库 ORM MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. gpg使用说明

    http://blog.163.com/ywz_306/blog/static/13257711201121921452480/

  10. 数据中心架构ToR和EoR【总结】

    1.前言 最近在看<云数据中心网络技术>,学习了企业数据中心网络建设过程,看到有ToR和EoR两种布线方式,之前没有接触过,今天总结一下. 2.布线方式 ToR:(Top of Rack) ...