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
时间: 2024-10-11 17:20:38