日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

給定實(shí)直線 \(L\)\(n\) 個(gè)開(kāi)區(qū)間組成的集合 \(I\) ,和一個(gè)正整數(shù) \(k\) ,試設(shè)計(jì)一個(gè)算法,從開(kāi)區(qū)間集合 \(I\) 中選取出開(kāi)區(qū)間集合 \(S \subseteq I\) ,使得在實(shí)直線 \(L\) 的任何一點(diǎn) \(x\)\(S\) 中包含點(diǎn) \(x\) 的開(kāi)區(qū)間個(gè)數(shù)不超過(guò) \(k\) 。且 \(\sum\limits_{z \in S} | z |\) 達(dá)到最大。這樣的集合 \(S\) 稱為開(kāi)區(qū)間集合 \(I\) 的最長(zhǎng) \(k\) 可重區(qū)間集。\(\sum\limits_{z \in S} | z |\) 稱為最長(zhǎng) \(k\) 可重區(qū)間集的長(zhǎng)度。

對(duì)于給定的開(kāi)區(qū)間集合 \(I\) 和正整數(shù) \(k\) ,計(jì)算開(kāi)區(qū)間集合 \(I\) 的最長(zhǎng) \(k\) 可重區(qū)間集的長(zhǎng)度。

輸入格式

文件的第 \(1\) 行有 \(2\) 個(gè)正整數(shù) \(n\)\(k\) ,分別表示開(kāi)區(qū)間的個(gè)數(shù)和開(kāi)區(qū)間的可重迭數(shù)。

接下來(lái)的 \(n\) 行,每行有 \(2\) 個(gè)整數(shù) \(l_i\)\(r_i\) ,表示開(kāi)區(qū)間的左右端點(diǎn)坐標(biāo),注意可能有 \(l_i > r_i\) ,此時(shí)請(qǐng)將其交換

輸出格式

輸出最長(zhǎng) \(k\) 可重區(qū)間集的長(zhǎng)度。

樣例

樣例輸入

4 2 1 7 6 8 7 10 9 13

樣例輸出

15

數(shù)據(jù)范圍與提示

\(1 \leq n \leq 500, 1 \leq k \leq 3\)

題解

先離散化

然后每個(gè)點(diǎn)向后面一個(gè)點(diǎn)連容量為 \(inf\) ,費(fèi)用為 \(0\) 的邊

對(duì)于一個(gè)區(qū)間 \(l,r\) ,從 \(l\) 連向 \(r\) ,容量為 \(1\) ,費(fèi)用為其長(zhǎng)度的相反數(shù),代表一個(gè)區(qū)間只能選一次,選一次的貢獻(xiàn)為它的長(zhǎng)度

這樣建模跑費(fèi)用流就可以使答案最大

但是還有每個(gè)點(diǎn)只能被覆蓋 \(k\) 的限制

那么源點(diǎn)向 \(1\) 號(hào)點(diǎn)連容量為 \(k\) ,費(fèi)用為 \(0\) 的邊

\(n\) 號(hào)點(diǎn)向匯點(diǎn)連容量為 \(k\) ,費(fèi)用為 \(0\) 的邊

在一次增廣中,每個(gè)點(diǎn)都只會(huì)被經(jīng)過(guò)一次

那么最大流一定為 \(k\) ,即 \(k\) 次增廣,所以每個(gè)點(diǎn)只會(huì)被經(jīng)過(guò) \(k\) 次,滿足題目限制

#include<bits/stdc++.h> #define ui unsigned int #define ll long long #define db double #define ld long double #define ull unsigned long long const int MAXN=1000+10,MAXM=(MAXN<<1),inf=0x3f3f3f3f; int n,k,e=1,beg[MAXN],cur[MAXN],L[MAXN],R[MAXN],r,level[MAXN],p[MAXN],vis[MAXN],clk,s,t,nex[MAXM<<1],to[MAXM<<1],cap[MAXM<<1],was[MAXM<<1],val[MAXN]; ll answas; std::queue<int> q; std::vector<int> V; std::map<int,int> M; template<typename T> inline void read(T &x) {T data=0,w=1;char ch=0;while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();if(ch=='-')w=-1,ch=getchar();while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();x=data*w; } template<typename T> inline void write(T x,char ch='\0') {if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');if(ch!='\0')putchar(ch); } template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);} template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);} template<typename T> inline T min(T x,T y){return x<y?x:y;} template<typename T> inline T max(T x,T y){return x>y?x:y;} inline void insert(int x,int y,int z,int w) {to[++e]=y;nex[e]=beg[x];beg[x]=e;cap[e]=z;was[e]=w;to[++e]=x;nex[e]=beg[y];beg[y]=e;cap[e]=0;was[e]=-w; } inline void discretization() {for(register int i=1;i<=n;++i)V.push_back(L[i]),V.push_back(R[i]);std::sort(V.begin(),V.end());V.erase(std::unique(V.begin(),V.end()),V.end());for(register int i=0,lt=V.size();i<lt;++i)M[V[i]]=i+1;for(register int i=1;i<=n;++i)L[i]=M[L[i]],R[i]=M[R[i]],chkmax(r,R[i]); } inline bool bfs() {memset(level,inf,sizeof(level));level[s]=0;p[s]=1;q.push(s);while(!q.empty()){int x=q.front();q.pop();p[x]=0;for(register int i=beg[x];i;i=nex[i])if(cap[i]&&level[to[i]]>level[x]+was[i]){level[to[i]]=level[x]+was[i];if(!p[to[i]])p[to[i]]=1,q.push(to[i]);}}return level[t]!=inf; } inline int dfs(int x,int maxflow) {if(x==t||!maxflow)return maxflow;vis[x]=clk;int res=0;for(register int &i=cur[x];i;i=nex[i])if((vis[to[i]]^vis[x])&&cap[i]&&level[to[i]]==level[x]+was[i]){int f=dfs(to[i],min(maxflow,cap[i]));res+=f;cap[i]-=f;cap[i^1]+=f;maxflow-=f;answas+=1ll*was[i]*f;if(!maxflow)break;}vis[x]=0;return res; } inline void MCMF() {while(bfs())clk++,memcpy(cur,beg,sizeof(cur)),dfs(s,inf); } int main() {read(n);read(k);for(register int i=1;i<=n;++i){read(L[i]);read(R[i]);if(L[i]>R[i])std::swap(L[i],R[i]);val[i]=R[i]-L[i];}discretization();s=r+1,t=s+1;insert(s,1,k,0);insert(r,t,k,0);for(register int i=1;i<r;++i)insert(i,i+1,inf,0);for(register int i=1;i<=n;++i)insert(L[i],R[i],1,-val[i]);MCMF();write(-answas,'\n');return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/hongyj/p/9433635.html

總結(jié)

以上是生活随笔為你收集整理的【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久av无码免费网站下载 | 在线看av网址 | 日韩中文字幕av电影 | 亚洲怡春院 | 每日av更新 | 成人免费网站在线 | 日韩理论视频 | 麻豆免费在线观看 | 成人特级毛片69免费观看 | 国产原创av在线 | 亚洲区免费 | 国产精品色婷婷99久久精品 | 亚洲欧洲中文字幕 | 日本不卡视频在线观看 | 久草99| 免费网站黄色 | 中国性猛交 | 凹凸精品熟女在线观看 | 夜夜骚av一区二区三区 | 五月婷婷丁香久久 | 3o一40一50一6o女人毛片 | 8090理论片午夜理伦片 | 欧美性bbw| 亚洲精品视频一区二区三区 | 在线观看日韩中文字幕 | 你懂的在线观看视频 | 光棍影院一区二区 | 国产九九九九九 | 欧美成人综合色 | 不卡国产视频 | 丰满人妻一区二区三区53视频 | 中文字幕码精品视频网站 | yes4444视频在线观看 | 特大黑人娇小亚洲女 | 精品国产一区二区三区四区 | 特黄视频免费看 | 亚洲综合日韩在线 | 日本japanese乳偷乱熟 | 久免费一级suv好看的国产 | 奇米影视欧美 | 欧美成人综合一区 | 欧美三级国产 | 中文字幕成人av | 亚洲乱码国产乱码精品天美传媒 | 日本色影院 | 精品久久久久久久久久久久久久 | 伊在线久久丫 | 最新国产黄色网址 | 66精品 | 午夜国产一区二区 | 国产av日韩一区二区三区精品 | 亚洲蜜臀av一区二区三区 | 欧美视频免费看 | 午夜欧美精品久久久久久久 | 国产精品高潮呻吟久久aⅴ码 | 欧产日产国产精品 | 国产伦理片在线观看 | 天堂av中文在线 | 国产第一页精品 | 国产成人三级在线播放 | 最近中文字幕免费 | 无遮挡的裸体按摩的视频 | 瑟瑟在线观看 | www亚洲一区 | 直接看的毛片 | 亚洲操片| 中文字幕在线观看一区二区三区 | 欧美一级精品 | 国产精品自拍视频 | aaaaaabbbbbb毛片| 中文天堂在线视频 | 深夜视频在线免费 | 91在线视频免费播放 | 第一av在线 | 韩日视频 | 怡春院欧美 | 欧美一卡二卡三卡 | 最近中文字幕在线免费观看 | 人民的名义第二部 | 国产精久久久久久 | 黄色香港三级三级三级 | 色版视频在线观看 | 综合久久久久 | 狠狠的干狠狠的操 | 日本高清视频在线播放 | 久久伊人国产 | 亚洲国产系列 | 四虎成人永久免费视频 | 涩涩涩涩涩涩涩涩涩 | 少妇性l交大片免潘金莲 | 91黄色国产 | 久久天堂av综合合色蜜桃网 | 欧美性生活一区二区三区 | 亚洲欧美日韩中文在线 | 日本a级片在线播放 | 亚洲色图 校园春色 | 这里只有精品视频在线 | 激情视频一区 | 久久丁香网 |