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.pswp.cn/news/373547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373547.shtml
英文地址,請注明出處:http://en.pswp.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()。 有關詳…