对于每个线段拆成两个点,如同之前一样建图,由于可能出现垂直于x轴的

所以建图由i指向i~

继续最小费用最大流

By:大奕哥

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=,inf=1e9;
  4. int head[N],d[N],f[N],l1[N],r1[N],l2[N],r2[N],a[N],s=1e9,t,n,k,cnt=-;
  5. long long cost;
  6. bool v[N];
  7. struct node{
  8. int to,nex,f,w,c;
  9. }e[];
  10. void add(int x,int y,int w,int c)
  11. {
  12. e[++cnt].to=y;e[cnt].w=w;e[cnt].f=x;e[cnt].c=c;e[cnt].nex=head[x];head[x]=cnt;
  13. e[++cnt].to=x;e[cnt].w=;e[cnt].f=y;e[cnt].c=-c;e[cnt].nex=head[y];head[y]=cnt;
  14. }
  15. queue<int>q;
  16. bool spfa()
  17. {
  18. memset(f,-,sizeof(f));
  19. memset(d,0x3f,sizeof(d));
  20. memset(v,,sizeof(v));
  21. d[s]=;v[s]=;q.push(s);
  22. while(!q.empty())
  23. {
  24. int x=q.front();q.pop();v[x]=;
  25. for(int i=head[x];i!=-;i=e[i].nex)
  26. {
  27. int y=e[i].to;
  28. if(d[y]<=d[x]+e[i].c||!e[i].w)continue;
  29.  
  30. d[y]=d[x]+e[i].c;f[y]=i;
  31. if(!v[y])q.push(y),v[y]=;
  32. }
  33. }
  34. if(d[t]>1e9)return ;
  35. int flow=inf;
  36. for(int i=f[t];i!=-;i=f[e[i].f])
  37. flow=min(flow,e[i].w);
  38. for(int i=f[t];i!=-;i=f[e[i].f])
  39. e[i].w-=flow,e[i^].w+=flow,cost+=1ll*e[i].c*flow;
  40. return ;
  41. }
  42. int main()
  43. {
  44. scanf("%d%d",&n,&k);int num=;
  45. memset(head,-,sizeof(head));
  46. for(int i=;i<=n;++i)
  47. {
  48. scanf("%d%d%d%d",&l1[i],&r1[i],&l2[i],&r2[i]);
  49. a[++num]=l1[i];a[++num]=l2[i];
  50. }
  51. sort(a+,a++num);
  52. num=unique(a+,a++num)-a-;
  53. for(int i=;i<=n;++i)
  54. {
  55. int x=sqrt(1ll*(l1[i]-l2[i])*(l1[i]-l2[i])+1ll*(r2[i]-r1[i])*(r2[i]-r1[i]));
  56. l1[i]=lower_bound(a+,a++num,l1[i])-a;
  57. l2[i]=lower_bound(a+,a++num,l2[i])-a;
  58. if(l1[i]!=l2[i])
  59. add((l1[i]<<)|,l2[i]<<,,-x);
  60. else
  61. add(l1[i]<<,(l2[i]<<)|,,-x);
  62. }
  63. for(int i=;i<num;++i)
  64. {
  65. add((i<<)|,i+<<,inf,);
  66. add(i<<,(i<<)|,inf,);
  67. }
  68. add(num<<,(num<<)|,inf,);
  69. t=num*+;
  70. add((num<<)|,t,k,);
  71. add(,,k,);s=;
  72. while(spfa());
  73. printf("%lld\n",-cost);
  74. return ;
  75. }

网络流24题之最长k可重线段集问题的更多相关文章

  1. 【网络流24题】最长k可重线段集(费用流)

    [网络流24题]最长k可重线段集(费用流) 题面 Cogs的数据有问题 Loj 洛谷 题解 这道题和最长k可重区间集没有区别 只不过费用额外计算一下 但是,还是有一点要注意的地方 这里可以是一条垂直的 ...

  2. 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题

    题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...

  3. *LOJ#6227. 「网络流 24 题」最长k可重线段集问题

    $n \leq 500$条平面上的线段,问一种挑选方法,使得不存在直线$x=p$与挑选的直线有超过$k$个交点,且选得的直线总长度最长. 横坐标每个点开一个点,一条线段就把对应横坐标连一条容量一费用( ...

  4. 【网络流24题】最长k可重区间集(费用流)

    [网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...

  5. LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   ...

  6. loj #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 题目描述 给定实直线 L LL 上 n nn 个开区间组成的集合 I II,和一个正整数 k kk,试设计一个算法,从开区间集合 I II 中选 ...

  7. 【网络流24题】最长k可重区间集问题(费用流)

    [网络流24题]最长k可重区间集问题 [问题分析] 最大权不相交路径问题,可以用最大费用最大流解决. [建模方法] 方法1 按左端点排序所有区间,把每个区间拆分看做两个顶点<i.a>< ...

  8. 网络流24题:最长 k 可重区间集问题题解

    最长 k 可重区间集问题题解: 突然想起这个锅还没补,于是来把这里补一下qwq. 1.题意简述: 有\(n\)个开区间,这\(n\)个开区间组成了一个直线\(L\),要求选择一些区间,使得在直线\(L ...

  9. 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集

    题目描述 给定实直线 \(L\) 上 \(n\) 个开区间组成的集合 \(I\) ,和一个正整数 \(k\) ,试设计一个算法,从开区间集合 \(I\) 中选取出开区间集合 \(S \subseteq ...

随机推荐

  1. Amcharts 柱状图和线形图

    最近需要学习 Amcharts ,他的图表功能确实很强大.但是网上搜索到的教程很少,开始学起的确有点不方便.于是我决定把我学习的觉得好的途径,放到博客上. 下面的代码可以直接复制,但是文件要从官网上下 ...

  2. 登入时session的处理方式

    暂时理解不够彻底  有空在详细介绍,先记录代码 1:创建一个工具类  存取当前登录用户 package com.liveyc.eloan.util; import javax.servlet.http ...

  3. 大数mod的技巧

    1.mod 3 将各个位上的数字相加对3求余. 2.mod 11 设这个数为abcdefghijklmnopqrst. ans=(t-s+r-q+p-o+n-m+l-k+j-i(以此类推))mod 1 ...

  4. AJAX的前世今生与未来

    一.通过三个问答来认识一下Ajax 什么是Ajax? Ajax是Asynchronous Javascript And XML的缩写,它是一种技术. Ajax有什么用? 这一技术能够向服务器请求额外的 ...

  5. CRF++模板使用(转)

    CRF++模板构建分为两类,一类是Unigram标注,一类是Bigram标注. Unigram和Bigram模板分别生成CRF的状态特征函数  和转移特征函数  .其中  是标签,  是观测序列,   ...

  6. 阿里分布式开源框架DUBBO 入门+ 进阶+ 项目实战视频教程

    史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...

  7. flask插件系列之Flask-WTF表单

    flask_wtf是flask框架的表单验证模块,可以很方便生成表单,也可以当做json数据交互的验证工具,支持热插拔. 安装 pip install Flask-WTF Flask-WTF其实是对w ...

  8. flask基础之jijia2模板使用基础(二)

    前言 在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的h5页面填充模板语言.而jijia2是一门十分强大的python的模板语言,是flask框架的核心模块之一.先简单介绍一 ...

  9. 分布式队列Celery入门

    Celery 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具.它是一个专注于实时处理的任务队列,同时也支持任务调度.Celery 是语言无关的,虽然它是用 Py ...

  10. bootstrap table 双击可编辑,添加、删除行

    html: <table class="table table-bordered" id="para_table"> <tr> < ...