zoukankan      html  css  js  c++  java
  • 527D Clique Problem 判断一维线段没有两辆相交的最大线段数量

    这题说的是给了n个位置 在x轴上 每个位置有一个权值为wi,然后将|xi - xj|>=wi+wj ,满足这个条件的点建一条边,计算着整张图中有多少多少个点构成的子图,使得这个子图的节点数尽量的大,这个式子进行转变 我们可以知道离i这个点为wi+xi xi-wi 范围内的点都是不可以的,那么我们就将这个n个点转化为了n条线段,那么现在的任务是计算这个n条线段两两不想交的 最大数量, 对于每条 线段有 左端点和右端点,我们将他们进行右端点排序, 然后进行每条边的判断前面k条线段的最右边那条是否与当先这条相交,如果相交,可以得知这条线段我们是不会使用的,因为我们有比他更加优的线段,在前面,如果不想交我们就把线段条数+1.记录当前最右的那条线段。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <cstdio>
     5 using namespace std;
     6 pair<int,int> P[200005];
     7 int main()
     8 {
     9     int n;
    10     while(scanf("%d",&n)==1){
    11          for(int i=0; i<n; i++){
    12               int x,w;scanf("%d%d",&x,&w);
    13               P[i] = {x+w,x-w};
    14          }
    15          sort(P,P+n);
    16          int r = -2000000000;
    17          int ans=0;
    18          for(int i=0; i<n; i++){
    19              if(P[i].second>=r){
    20                  r = P[i].first; ans++;
    21              }
    22          }
    23         printf("%d
    ",ans);
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    Windows上安装PyV8
    Windows鼠标右键菜单添加SublimeText打开选项
    Windows使用Python虚拟环境
    Windows同时安装Python2和Python3
    Windows使用Cmder
    Visual Studio Code配置
    Windows 10使用Tesseract-OCR出现WindowsError: [Error 2]
    用pymysql代替MySQLdb
    使用python来搞定redis的订阅功能
    来写一个最基本的装饰器吧!
  • 原文地址:https://www.cnblogs.com/Opaser/p/4360890.html
Copyright © 2011-2022 走看看