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. MUI学习03-滚动图(幻灯片)及菜单项(九宫格)

    <!--标准mui.css-->引入CSS:<link rel="stylesheet" href="../css/mui.min.css"& ...

  2. jeffy-vim-v3.1.tar.gz

    下载链接: https://files.cnblogs.com/files/pengdonglin137/jeffy-vim-v3.1.tar.gz 1. 使用sublimemonokai配色 2. ...

  3. NDVI等植被相关指数

    一.基础概念 NDVI(Normalized Difference Vegetation Index,归一化差分植被指数,标准差异植被指数),植被覆盖指数.也称为生物量指标变化,可使植被从水和土的图像 ...

  4. ORACLE通过SQL将一行数据转换为多行

    转换前和需要转成的格式如下图: sql语句如下: , ; 效果如下:

  5. linux下gflags的安装

    gflags是google开发的一套命令行参数解析工具,被很多软件系统所依赖,应该算是一个基础的库,安装其实很简单,但是如果在网上找的一些教程大部分都是安装后不能被其他软件调用的,因为默认使用cmak ...

  6. flink 有状态udf 引起血案一

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/rlnLo2pNEfx9c/article/details/83422587 场景 近期在做一个画像的 ...

  7. Java+Selenium3框架设计篇5-如何实现邮件发送测试报告

    https://blog.csdn.net/u011541946/article/details/77278837 本篇继续回答网友的问题,这个主题是如何通过邮件发送测试报告.通过邮件发送测试报告,这 ...

  8. phpStorm中如何不让其自动添加封闭大括号?

    Settings > Editor > General->Smart Keys.

  9. 每天一个linux命令(10):cat

    1.命令简介 cat (concatenate,连接)命令将[文件]或标准输入组合输出到标准输出,如果没有指定文件,或者文件为"-",则从标准输入读取. 2.用法 cat [选项] ...

  10. go微服务框架go-micro深度学习(三) Registry服务的注册和发现

    服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性.go-micro框架的服务发现有自己能用的接口Registry.只要实现这个接口就可以定制自己的服务注册和发现. go- ...