网络流24题之最长k可重线段集问题
对于每个线段拆成两个点,如同之前一样建图,由于可能出现垂直于x轴的
所以建图由i指向i~
继续最小费用最大流
By:大奕哥
#include<bits/stdc++.h>
using namespace std;
const int N=,inf=1e9;
int head[N],d[N],f[N],l1[N],r1[N],l2[N],r2[N],a[N],s=1e9,t,n,k,cnt=-;
long long cost;
bool v[N];
struct node{
int to,nex,f,w,c;
}e[];
void add(int x,int y,int w,int c)
{
e[++cnt].to=y;e[cnt].w=w;e[cnt].f=x;e[cnt].c=c;e[cnt].nex=head[x];head[x]=cnt;
e[++cnt].to=x;e[cnt].w=;e[cnt].f=y;e[cnt].c=-c;e[cnt].nex=head[y];head[y]=cnt;
}
queue<int>q;
bool spfa()
{
memset(f,-,sizeof(f));
memset(d,0x3f,sizeof(d));
memset(v,,sizeof(v));
d[s]=;v[s]=;q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();v[x]=;
for(int i=head[x];i!=-;i=e[i].nex)
{
int y=e[i].to;
if(d[y]<=d[x]+e[i].c||!e[i].w)continue; d[y]=d[x]+e[i].c;f[y]=i;
if(!v[y])q.push(y),v[y]=;
}
}
if(d[t]>1e9)return ;
int flow=inf;
for(int i=f[t];i!=-;i=f[e[i].f])
flow=min(flow,e[i].w);
for(int i=f[t];i!=-;i=f[e[i].f])
e[i].w-=flow,e[i^].w+=flow,cost+=1ll*e[i].c*flow;
return ;
}
int main()
{
scanf("%d%d",&n,&k);int num=;
memset(head,-,sizeof(head));
for(int i=;i<=n;++i)
{
scanf("%d%d%d%d",&l1[i],&r1[i],&l2[i],&r2[i]);
a[++num]=l1[i];a[++num]=l2[i];
}
sort(a+,a++num);
num=unique(a+,a++num)-a-;
for(int i=;i<=n;++i)
{
int x=sqrt(1ll*(l1[i]-l2[i])*(l1[i]-l2[i])+1ll*(r2[i]-r1[i])*(r2[i]-r1[i]));
l1[i]=lower_bound(a+,a++num,l1[i])-a;
l2[i]=lower_bound(a+,a++num,l2[i])-a;
if(l1[i]!=l2[i])
add((l1[i]<<)|,l2[i]<<,,-x);
else
add(l1[i]<<,(l2[i]<<)|,,-x);
}
for(int i=;i<num;++i)
{
add((i<<)|,i+<<,inf,);
add(i<<,(i<<)|,inf,);
}
add(num<<,(num<<)|,inf,);
t=num*+;
add((num<<)|,t,k,);
add(,,k,);s=;
while(spfa());
printf("%lld\n",-cost);
return ;
}
网络流24题之最长k可重线段集问题的更多相关文章
- 【网络流24题】最长k可重线段集(费用流)
[网络流24题]最长k可重线段集(费用流) 题面 Cogs的数据有问题 Loj 洛谷 题解 这道题和最长k可重区间集没有区别 只不过费用额外计算一下 但是,还是有一点要注意的地方 这里可以是一条垂直的 ...
- 【刷题】LOJ 6227 「网络流 24 题」最长k可重线段集问题
题目描述 给定平面 \(\text{xoy}\) 上 \(n\) 个开线段组成的集合 \(\text{I}\) ,和一个正整数 \(k\) ,试设计一个算法. 从开线段集合 \(\text{I}\) ...
- *LOJ#6227. 「网络流 24 题」最长k可重线段集问题
$n \leq 500$条平面上的线段,问一种挑选方法,使得不存在直线$x=p$与挑选的直线有超过$k$个交点,且选得的直线总长度最长. 横坐标每个点开一个点,一条线段就把对应横坐标连一条容量一费用( ...
- 【网络流24题】最长k可重区间集(费用流)
[网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...
- LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 ...
- loj #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 题目描述 给定实直线 L LL 上 n nn 个开区间组成的集合 I II,和一个正整数 k kk,试设计一个算法,从开区间集合 I II 中选 ...
- 【网络流24题】最长k可重区间集问题(费用流)
[网络流24题]最长k可重区间集问题 [问题分析] 最大权不相交路径问题,可以用最大费用最大流解决. [建模方法] 方法1 按左端点排序所有区间,把每个区间拆分看做两个顶点<i.a>< ...
- 网络流24题:最长 k 可重区间集问题题解
最长 k 可重区间集问题题解: 突然想起这个锅还没补,于是来把这里补一下qwq. 1.题意简述: 有\(n\)个开区间,这\(n\)个开区间组成了一个直线\(L\),要求选择一些区间,使得在直线\(L ...
- 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集
题目描述 给定实直线 \(L\) 上 \(n\) 个开区间组成的集合 \(I\) ,和一个正整数 \(k\) ,试设计一个算法,从开区间集合 \(I\) 中选取出开区间集合 \(S \subseteq ...
随机推荐
- JQuery 中三十一种选择器的应用
选择器(selector)是CSS中很重要的概念,所有HTML语言中的标记都是通过不同的CSS选择器进行控制的.用户只需要通过选择器对不同的HTML标签进行控制,并赋予各种样式声明,即可实现各种效果. ...
- script标签中type为<script type="text/x-template">是个啥
写过一点前端的都会碰到需要使用JS字符串拼接HTML元素然后append到页面DOM树上的情况,一般的写法都是使用+号以字符串的形式拼接,如果是短点的还好,如果很长很长的话就会拼接到令人崩溃了. 比如 ...
- JFinal向客户端渲染图片的方法
JFinal提供了好几种方便的render但是不知道为啥就是没有提供直接渲染图片的render,如果我们直接在Controller的方法中往输入流中写的话是还是会有默认的render生效的,比如下面这 ...
- Verilog笔记.5.同步、异步
在数字电路中经常有同步synchronism.异步asynchronism的概念.异步指输入信号和时钟无关:同步指输入信号和时钟信号有关,实际上就是输入信号和时钟信号进行了与运算或者与非运算.实际开发 ...
- 26_Python的内置函数
The Python interpreter has a number of functions and types built into it that are always available.P ...
- 一致性hash理解
在做memcached分布式集群时往往要用到一致性hash算法来调节缓存数据的分布. 通常的hash算法是以服务器数量N作为模数,使用key%N的值来获得最终位置,显然当服务器数量发生变化即N发生变化 ...
- 阻止MyEclipse启动项目时自动跳转的debug视图
启动web项目时,习惯使用debug方式启动,但此时会自动跳转到debug视图,很不习惯. 通过修改首选项配置,可以禁止跳转
- HDU 4725 The Shortest Path in Nya Graph(spfa+虚拟点建图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题目大意:有n层,n个点分布在这些层上,相邻层的点是可以联通的且距离为c,还有额外给出了m个条边 ...
- Linux 用户篇——用户管理命令之useradd、passwd、userdel、usermod
一.用户重要,用户管理命令同样重要 用户是Linux系统安全的核心,每个登录Linux系统的用户都会分配相应的权限,这些权限取决于能否访问系统中各种对象.而管理这些用户的相关信息离不开用户管理命令,比 ...
- Js数组的常用的方法概述
学习JS的同学们,也曾对数组进行学习掌握,所以我也把数组中常用的方法列举下来,相互学习 不多废话,直接上正文 . 快乐的分割线... 一.对象继承的方法 数组是一种特殊 ...