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,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- C# WebClient 使用http免费代理
static void Main(string[] args) { WebClient client = new WebClient(); client.Encoding = Encoding.Get ...
- 一些斗鱼TV Web API [Some DouyuTv API]
一些斗鱼TV Web API [Some DouyuTv API] 写在最前 去年TI5前开发了dotaonly.com,网站需要用到各个直播平台API.不像国外网站Twitch那样开放,都有现成 ...
- Makefile中wildcard的介绍
在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTER ...
- 文件 I/O字符流
import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOExceptio ...
- [【转】ubuntu 16.10 Server 安装及基本部署
一.Ubuntu Server 16.10 LTS 系统安装 Ubuntu 16.10 分为 桌面版 (desktop)和服务器版(Server).两者对于用户而言,最大的区别在于桌面版有图形操作界面 ...
- 大数据培训班 cloudera公司讲师面对面授课 CCDH CCAH CCP
大数据助力成就非凡.大数据正在改变着商业游戏规则,为企业解决传统业务问题带来变革的机遇.毫无疑问,当未来企业尝试分析现有海量信息以推动业务价值增值时,必定会采用大数据技术. 目前对大数据的分析工具,首 ...
- Android StateListDrawable的坑
有问题的代码: StateListDrawable background = new StateListDrawable(); CircleDrawable pressedDrawable = new ...
- 洛谷P3958 奶酪
题目链接 这道题貌似可以用BFS来写吧qwq. 我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可. 但是需要注意的是还有这样的一种情况:有一个大洞贯 ...
- 创龙DSP6748的DAC例程研究
1. 创龙DSP6748开发板驱动TL5724这个DAC,输出指定的电压值,此程序是使用 IO 口模拟 SPI 实现与 TL5724 模块的数据交互. 2. 首先是初始化PSC函数 void PSCI ...
- es6严格模式需要注意的地方
1.块级函数 "use strict"; if (true) { function f() { } // 语法错误 } es5中严格模式下禁止声明块级函数,而在es6的严格模式中可 ...