clique 解题报告
clique
题目描述
数轴上有 \(n\) 个点,第 \(i\) 个点的坐标为 \(x_i\),权值为 \(w_i\)。两个点 \(i\),\(j\) 之间存在一条边当且仅当 \(abs(x_i-x_j)>=w_i+w_j\)。你需要求出这张图的最大团的点数。(团就是两两之间有边的顶点集合)
输入数据
第一行一个整数 \(n\),接下来 \(n\) 行每行两个整数 \(x_i,w_i\)。
输出数据
一行一个整数表示答案
数据范围
对于 \(20\%\) 的数据, \(n<=10\)。
对于 \(60\%\) 的数据, \(n<=1000\)。
对于 \(100\%\) 的数据, \(n<=200000\), \(0<=|x_i|,w_i<=10^9\)。
考试的时候发现了一个性质
如果三个点按从左到右排,点1点2有边且点2点3右边可以得到点1点3有边
于是可以\(N^2\)连边跑topo最长路(从左到右连有向边)
想拿\(set\)优化连边但是没想到。
结果数组开小爆30了。
正解算是没想到吧。
如果把点看做形如\([x-w,x+w]\)的区间,那么两个点有连边等价于区间无交点。
于是问题转化成了不重合的区间数量
可以简单的贪心,也可以DP
复杂度都是\(O(nlogn)\)的
Code:
#include <cstdio>
#include <algorithm>
const int N=2e5+10;
struct node
{
int l,r;
bool friend operator <(node n1,node n2){return n1.r<n2.r;}
}seg[N];
int rr[N],dp[N],f[N],pos[N],n;
int max(int x,int y){return x>y?x:y;}
int main()
{
scanf("%d",&n);
for(int x,w,i=1;i<=n;i++)
{
scanf("%d%d",&x,&w);
seg[i].l=x-w,seg[i].r=x+w;
rr[i]=seg[i].r;
}
std::sort(seg+1,seg+1+n);
std::sort(rr+1,rr+1+n);
rr[0]=seg[1].r-1;
for(int i=1;i<=n;i++)
{
int l=0,r=i-1;
while(l<r)
{
int mid=l+r+1>>1;
if(seg[i].l>=rr[mid])
l=mid;
else
r=mid-1;
}
pos[i]=l;
}
for(int i=1;i<=n;i++)
dp[i]=f[pos[i]]+1,f[i]=max(f[i-1],dp[i]);
printf("%d\n",f[n]);
return 0;
}
2018.10.13
clique 解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- Laravel-admin 当使用Form组件hasMany的时候 进行编辑出现错误 foreach错误的时候解决方案
我的关联关系原名是 goodImage 修改成 image 之后解决问题 分析得出应该是 laravel会将goodImage 转成 good_image字段 这样就foreach会报错 所以出 ...
- python 中 pynlpir错误 Cannot Open Configure file pynlpir\Data\Configure.xml 解决
在用python做分词.数据处理的时候,想调用pynlpir库,pynlpir.open()时出现错误,更新一下授权文件还是错误, 仔细一看错误是:Cannot Open Configure file ...
- 007---logging日志模块
logging模块 用途:服务器运行日志.运维日志... import logging from logging.handlers import RotatingFileHandler, TimedR ...
- 使用localStorage,sessionStorage,cookie等存储
Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加.删除.修改.查询操作. 特点: localStor ...
- HBase Scan,Get用法
Scan,get用法 1. get help帮助信息 从下列get用法信息可以看出 get 后面可以跟table表名,rowkey,以及column,value.但是如果想通过get直接获取一个表中的 ...
- docker windows container的一些注意点
1.在阿里云esc的ws2016里装docker只能使用windows container,因为官方也说了主机也是虚拟机所以不能开启Hyper-v. 2.默认使用nat模式运行network,该模式在 ...
- linux安装oracle远程客户端
文章参考:http://blog.csdn.net/caomiao2006/article/details/11901123 感谢博友分享O(∩_∩)O~ 安装oracle 远程客户端(一般情况下本地 ...
- c++返回引用
#include <iostream> #include <ctime> using namespace std; double vals[] = {10.1, 12.6, 3 ...
- android中的文件(图片)上传
android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...
- Ubuntu 手机 app开发学习0
# 相关网址 http://developer.ubuntu.com/zh-cn/apps/sdk/ 0. 环境搭建 首选需要一个Ubuntu 14.04操作系统.没啥好讲的,直接安装了一个虚拟机. ...