POJ 3680_Intervals

题意:

给定区间和该区间对应的权值,挑选一些区间,求使得每个数都不被K个区间覆盖的最大权值和。

分析:

如果K=1,即为区间图的最大权独立集问题。可以对区间所有端点排序后利用动态规划的方法,设dp[i]为只考虑区间右端点小于等于xi的区间所得到的最大总权重。

dp[i] = max(dp[i - 1], max{dp[j] + w[k])|a[k] = x[j]且b[k] = x[i]}

K>1,既然求权重最大值,利用最小费用流,很容易想到从a[i]b[i]连一条容量为1,费用为w[i]的边,但是如何限制每个数不被超过K个区间覆盖呢?从ii+1连一条容量为K,费用为0的边,这样便限制了流经每个端点的流量不超过K,也就满足每个数不被超过K个区间覆盖啦~注意区间端点的离散化~~

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int maxn = 505, maxm = 1000;
const int INF = 0x3f3f3f3f;
int s, t, tot;
int dist[maxm], prevv[maxm], preve[maxm], head[maxm];
int a[maxn], b[maxn], w[maxn], tt[maxm];
bool in[maxn];
struct Edge{ int from, to, next, cap, cost;}edge[maxm * 3];
void add_edge(int from, int to, int cap, int cost)
{edge[tot].to = to;edge[tot].from = from;edge[tot].cap = cap;edge[tot].cost = cost;edge[tot].next = head[from];head[from] = tot++;edge[tot].to = from;edge[tot].from = to;edge[tot].cap = 0;edge[tot].cost = -cost;edge[tot].next = head[to];head[to] = tot++;
}
int mincost()
{int flow=0, cost=0;for(;;){memset(dist, 0x3f, sizeof(dist));memset(in, false, sizeof(in));queue<int>q;q.push(s);in[s] = true;dist[s]=0;while(!q.empty()){int u = q.front();q.pop();in[u] = false;for(int i = head[u]; i != -1; i = edge[i].next){Edge e = edge[i];if(e.cap>0 && dist[e.to] > dist[u] + e.cost){dist[e.to] = dist[u] + e.cost;prevv[e.to] = u, preve[e.to] = i;if(!in[e.to]){in[e.to] = true;q.push(e.to);}}}}if(dist[t] == INF)  return cost;int d = INF;for(int i = t; i != s; i = prevv[i])d = min(d, edge[preve[i]].cap);flow += d;cost += dist[t] * d;for(int i = t; i != s; i = prevv[i]){edge[preve[i]].cap -= d;edge[preve[i]^1].cap += d;}}
}
int main()
{int c;scanf("%d",&c);while(c--){int N, K;memset(head,-1,sizeof(head));tot = 0;int n = 0;scanf("%d%d",&N, &K);for(int i = 0; i < N; i++){scanf("%d%d%d", &a[i], &b[i], &w[i]);tt[n++] = a[i];tt[n++] = b[i];}sort(tt, tt + n);int nn = unique(tt, tt +n) - tt;int na, nb;for(int i = 0; i < N; i++){na = lower_bound(tt, tt + nn, a[i]) - tt;nb = lower_bound(tt, tt + nn, b[i]) - tt;add_edge(na + 1, nb + 1, 1, -w[i]);}s = 0, t = nn + 1;add_edge(s, 1, K, 0);for(int i = 1; i <= nn; i++)add_edge(i, i + 1, K, 0);printf("%d\n",-mincost());}return 0;
}

其实这题也可以是从i+1i连一条容量为1,权值为w[i]的边,用求出的最小费用流减去所有区间权值和,再取负数就好啦~实际上是取最小费用流对应的区间之外的区间,因为建图保证每个点都不被超过K个区间覆盖,所以不用担心与题目不符啦~~


tle了一整天。。。。
很巧妙的构图~~~

转载于:https://www.cnblogs.com/Tuesdayzz/p/5758758.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB 数据类型查询——$type使用

在MongoDB中根据字段的数量类型来查询数据使用$type操作符来实现&#xff0c;具体使用法语&#xff1a;1db.集合名.find({$type:类型值}) //这里的类型值能使用Number也能使用alias举个例子&#xff1a;12db.person.find({address:{$type:2}}) //查询address字段数据…

Spring和JSF集成:MVC螺母和螺栓

过去&#xff0c;我曾尝试将JSF与Spring MVC集成在一起&#xff0c;尽管我的第一次尝试成功了&#xff0c;但这远非理想。 这次&#xff0c;我决定做出一些关键决定来帮助我集中精力&#xff1a; 向后兼容。 支持JSF 1.2涉及的工作太多&#xff0c;而Spring 3.1中出现了太多的好…

文字描边_如何在网页里实现文字描边效果

文字描边想要在网页里实现文本描边效果&#xff0c;在以前只能使用Photoshop等来实现&#xff0c;但现在只需要一个text-stroke属性&#xff0c;即可轻松做到文本描边&#xff0c;渐变文本描边&#xff0c;甚至图片文本描边。01语法text-stroke: text-stroke是一个复合属性&…

javascript数据结构-栈

github博客地址 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。遵循后进先出原则&#xff0c;像垃圾桶似的。功能实现依然按照增删改查来进行&#xff0c;内部数据存储可以借用语言原生支持的数组。 栈类 function Stack(){this.data []; }添…

MongoDB 字符串值长度条件查询

在实际项目中常常会有根据字段值长度大小进行限制查询&#xff0c;例如查询商品名称过长或过短的商品信息&#xff0c;具体的实现方式可能有多种&#xff0c;在此记录常见的两种实现使用 $where 查询&#xff08;性能稍逊一些&#xff09;12345//查询商品名称长度大于25个字符的…

虚拟化Java应用程序:最佳实践(JavaOne 2011)

贾斯汀穆雷&#xff08;Justin Murray&#xff09;早五分钟就开始了他的演讲[“虚拟化Java应用程序&#xff1a;最佳实践”&#xff08;21860&#xff09;]&#xff0c;并说虚拟化已经到了人们不再需要担心利用虚拟化的地步。 他说他的演讲大约有一年的历史&#xff0c;是一个团…

linux里hba状态_Windows和Linux系统查看HBA卡wwn号的方法 | 系统之家官网

一、windows 系统在windows系统中&#xff0c;可以使用fc hba卡厂家提供的管理软件查看光纤适配器的wwn号码&#xff0c;具体如下&#xff1a;qlogic&#xff1a;sansurferemulex&#xff1a;hbanyware二、suse linux 9查看 /proc/scsi/qla2xxx/* &#xff0c;并以 adapter-por…

”二柱子“个人项目

”二柱子“个人项目 关于二柱子的个人项目&#xff0c;据说……是这么发生的…… 二柱子因为懒(,,• ₃ •,,)&#xff0c;要给他上小学的儿子编写个能够出小学四则运算题目的程序。老师上课的时候又添加了条件&#xff1a; 1、打印至少30道题 2、除了整数之外&#xff0c;还要…

phpstorm9 增加对.vue的支持

1、安装vue.js插件 2、设置javascript version为ECMAScript 6 3、 <script type"text/ecmascript-6"> </script>转载于:https://www.cnblogs.com/lobtao/articles/6044378.html

Eclipse中的集成Git插件删除线上远程分支

Eclipse 的忠实党,在使用Git 多人协作以分支的形式开发应用时分支合并到主干后往往再没什么用(我的做法是保留一两周再干掉),在此记录使用Eclipse的Git 插件来删除无用的分支。 操作步骤: 项目右键 — Team — Remote — Push — Next — Finesh 1,下拉框选择你要删除的远程分支…

mysql 查询系统_使用select和show命令查看mysql数据库系统信息

(1).select显示当前日期和时间mysql> select now();---------------------| now() |---------------------| 2019-06-05 13:46:20 |---------------------1 row in set (0.00 sec)显示当前日期mysql> select curdate();------------| curdate() |------------| 2019-06-0…

从MongoDB GridFS流式传输文件

不久前&#xff0c;我在Twitter上发布了自己的最新作品&#xff0c;即从MongoDB GridFS传输文件进行下载&#xff08;而不是将整个文件存储到内存中然后提供服务&#xff09;&#xff0c;这是我取得的一个小胜利。 我答应就此事写博客&#xff0c;但不幸的是&#xff0c;我的特…

0. 洗好虾和锅 1. 放水放老姜&#xff0c;烧开&#xff0c;放盐 2. 放入虾&#xff0c;沸腾后&#xff0c;尝咸淡 3. 放香葱&#xff0c;乘起来转载于:https://www.cnblogs.com/gary-tao/p/5248139.html

读字库遇到坑爹的问题

转载请注明出处&#xff1a;http://blog.csdn.net/qq_26093511/article/details/53099262 最近在做一个led显示屏的项目&#xff0c; 我想显示 “常”&#xff0c;“州”&#xff0c;“大”&#xff0c;“学”这几个字&#xff0c;但是只能显示 “常” 和 “大”&#xff0c;…

如果–否则为编码风格最佳实践

下面的帖子将是一个高级花括号讨论&#xff0c;没有对与错的答案&#xff0c;只是更多的“品味”。 它是关于是否将“ else”&#xff08;以及其他关键字&#xff0c;例如“ catch”&#xff0c;“ finally”&#xff09;放在换行符上。 有些人可能会写 if (something) {doIt(…

MongoDB 去重(distinct)查询后求总数(count)

在使用MonoDB 做报表汇总经常的有去重统计总数的需求,在此总结一下实现方式: 1, 直接使用distinct 语句查询, 这种查询会将所有查询出来的数据返回给用户, 然后对查询出来的结果集求总数(耗内存,耗时一些) var len db.student.distinct("name",{"age" :…

adobe premiere pro cc2015.0已停止工作 解决办法

adobe premiere pro cc2015.0已停止工作 一直报错 解决办法就是&#xff1a; 删除【我的电脑】- 【我的文档】下的 Adobe 下的Premiere Pro文件夹 现象就是怎么重新安装都不管用Premiere 参考路径 &#xff1a;C:\Users\xxx\Documents\Adobe\Premiere Pro 转载于:https://…

java mysql 语句解析器_几种基于Java的SQL解析工具的比较与调用

1、sqlparserhttp://www.sqlparser.com/优点&#xff1a;支持的数据库最多&#xff0c;除了传统数据库外还支持hive和greenplum一类比较新的数据库&#xff0c;调用比较方便&#xff0c;功能不错缺点&#xff1a;收费&#xff0c;500$起2、Apache Calcite一个构建JDBC或者ODBC访…

Css Sprites 多张图片整合在一张图片上

CSS Sprites原理&#xff1a; CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中&#xff0c;再利用CSS的“background-image”&#xff0c;“background- repeat”&#xff0c;“background-position”的组合进行背景定位&#xff0c;background-position可以用数…

MongoDB 分析查询性能

cursor.explain(“executionStats”)和 db.collection.explain(“executionStats”) 方法提供关于查询性能的相关信息。这些信息可用于衡量查询是否使用了索引以及如何使用索引。 db.collection.explain() 还提供有关其他操作的执行信息。例如 db.collection.update()。 有关详…