CF527D Clique Problem

CF527D Clique Problem

题意简述

数轴上有n 个点,第i 个点的坐标为xi,权值为wi。两个点i,j之间存在一条边当且仅当 abs(xi-xj)>=wi+wj。 你需要求出这张图的最大团的点数。(团就是两两之间有边的顶点集合)

solution

简单贪心

化简原式:就是找xi-wi>=xj-wj

那对于一个点i,设li=xi-wi,ri=xi+wi

把每一个点看作[li,ri]间的一条线段,只要表示两点的

线段不重叠,就有一条边,然后就是一道贪心了

CF里面的神奇思维题,难度没有那么大,提高难度比较适宜(恶意评分?)

#include<bits/stdc++.h>

using namespace std;

int n;
struct node
{
int l;
int r;
friend bool operator < (node a1,node a2)
{
if(a1.r!=a2.r) return a1.r<a2.r;
else return a1.l<a2.l;
}
} t[200000 + 10];

int ans=0;

int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
t[i].l=a-b;
t[i].r=a+b;    
}
sort(t+1,t+n+1);
int r= -(1<<30);
for(int i=1;i<=n;i++)
{
if(t[i].l>=r)
{
ans++;
r=t[i].r;
} 
}
cout<<ans<<endl;
}
原文地址:https://www.cnblogs.com/wlzs1432/p/9690247.html