網路流24題 最長k可重區間集問題(費用流)

2021-08-17 05:06:05 字數 1275 閱讀 5188

傳送門

考試的時候想到了費用流的一點東西,但是沒有寫出來,現在看來建圖也挺簡單的。

s向1,n向t分別連一條容量為k,費用為0的邊,表示最多可以重疊k次;

每個點向下乙個點連一條容量為inf,費用為0的邊,表示一種連線關係;

對於每個區間,左端點向右端點連邊,容量為1,費用為區間長度;

求最大費用最大流即可,注意離散化;

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=10001;

const

int inf=1e9;

queue

q;int n,k,maxflow,mincost,l[maxn],r[maxn],a[maxn];//a陣列用於離散化

struct edgeedge[maxn<<1];

int head[maxn],num_edge=-1,pre[maxn],last[maxn],dis[maxn],flow[maxn];

bool vis[maxn];

void add_edge(int from,int to,int flow,int dis)

void add(int x,int y,int z,int f)

bool spfa(int s,int t)}}

}return pre[t]!=-1;

}void mcmf(int s,int t)

}}int main()

sort(a+1,a+1+2*n);

int nn=unique(a+1,a+1+2*n)-a-1;

int s=0,t=nn+1;

add(s,1,k,0); add(nn,t,k,0);

for (int i=1; i<=nn-1; i++) add(i,i+1,inf,0);

for (int i=1; i<=n; i++)

mcmf(s,t);

printf("%d",-mincost);

return

0;}

要sort之後再使用unique;注意lower_bound的應用;

感覺網路流和動態規劃有相似之處,你把圖建好了,她就會給你求出最優狀態

網路流24題 最長k可重區間集(費用流)

cogs loj洛谷 首先注意一下 這道題目裡面 在cogs上直接做就行了 洛谷和loj上需要判斷資料合法,如果 l r 就要交換l,r 首先離散化 資料範圍比較大 記錄一下l,r 和區間大小 這個問題可以換一種看法 相當於從源點出發,走k次,問你路徑的最大權值和 其中有些邊可以無限制的走,但是它們...

網路流24題 最長k可重區間集(費用流)

cogs loj洛谷 首先注意一下 這道題目裡面 在cogs上直接做就行了 洛谷和loj上需要判斷資料合法,如果 l r 就要交換 l,r 首先離散化 資料範圍比較大 記錄一下 l,r 和區間大小 這個問題可以換一種看法 相當於從源點出發,走k次,問你路徑的最大權值和 其中有些邊可以無限制的走,但是...

網路流24題之最長k可重區間集問題

對於每個點向後乙個點連流量為k費用為0的邊 對每一區間連l到r流量為1費用為r l的邊 然後最小費用最大流,輸出取反 一開始寫的r l 1錯了半天。by 大奕哥 1 include2 using namespace std 3const int n 10000005,inf 1e9 4int hea...