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,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- hadoop生态搭建(3节点)-03.zookeeper配置
# https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html # ===== ...
- 清华大学《C++语言程序设计基础》线上课程笔记01---基础概念与一些注意事项
使用除法的注意事项 double b = 4.0 * 1/239.0; 因为整数相除结果取整,如果参数写1/239,结果就都是0 浮点数注意事项 浮点数是近似存储,所以不能直接比较两个浮点数的大小, ...
- CentOs安装Mysql和配置初始密码
mysql官网yum安装教程,地址:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/#repo-qg-yum-fresh-install ...
- R语言学习笔记(三):零碎知识点(1-10)
1--c() c表示"连接"(concatenate). 在R中向量是连续存储的,因此不能插入或删除元素. 2--seq() seq()的特殊用法,可以用在for循环里for(i ...
- 动态规划----FatMouse’s Speed(HDU 1160)
参考:https://blog.csdn.net/u012655441/article/details/64920825 https://blog.csdn.net/wy19910326/articl ...
- HDU1301 Jungle Roads(Kruskal)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- 2018徐州网络赛H. Ryuji doesn't want to study
题目链接: https://nanti.jisuanke.com/t/31458 题解: 建立两个树状数组,第一个是,a[1]*n+a[2]*(n-1)....+a[n]*1;第二个是正常的a[1], ...
- (原)一段看似美丽的for循环,背后又隐藏着什么
之前很长一段时间,潜心修炼汇编,专门装了一个dos7,慢慢玩到win32汇编,再到linux的AT&A汇编,尝试写mbr的时候期间好几次把centos弄的开不了机,又莫名其妙的修好了,如今最大 ...
- 九度OJ--1165(C++)
#include <iostream>#include <string>#include <vector> using namespace std; int mai ...
- Turtle模块,一个超精简但功能齐全的绘图包
先上官方链接https://docs.python.org/3.3/library/turtle.html 再上一个GitHub上别人做的一个小程序,画小猪佩琦的,里面用到了大量常用的turtle接口 ...