5841: 最大团
时间限制: 1 Sec 内存限制: 128 MB提交: 97 解决: 37
[ 提交][ 状态][ 讨论版][命题人: admin]
题目描述
数轴上有n个点,第i个点的坐标为xi,权值为wi。两个点i,j之间存在一条边当且仅当abs(xi-xj)>=wi+wj。
你需要求出这张图的最大团的点数。
(团就是两两之间有边的顶点集合)
你需要求出这张图的最大团的点数。
(团就是两两之间有边的顶点集合)
输入
第一行一个整数n,接下来n行每行两个整数xi,wi。
输出
输出一行一个整数,表示最大团的点数。
样例输入
4
2 3
3 1
6 1
0 2
样例输出
3
提示
对于20%的数据,n<=10。
对于60%的数据,n<=1000。
对于100%的数据,n<=200000,0<=|xi|,wi<=10^9。
来源
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
struct node{
int l, r;
}st[200005];
int cmp(node a, node b)
{
return a.r<b.r;
}
int main()
{
int n, x, w;
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
scanf("%d%d", &x, &w);
st[i].l=x-w;
st[i].r=x+w;
}
sort(st+1, st+n+1, cmp);
int temp=st[1].r, ans=1;
for(int i=2;i<=n;i++)
if(st[i].l>=temp)
{
temp=st[i].r;
ans++;
}
printf("%d\n", ans);
return 0;
}
/**************************************************************
Problem: 5841
User: ldu_reserver201701
Language: C++
Result: 正确
Time:168 ms
Memory:2656 kb
****************************************************************/