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

2022-03-27 06:53:30 字數 1131 閱讀 8530

對於每個點向後乙個點連流量為k費用為0的邊

對每一區間連l到r流量為1費用為r-l的邊

然後最小費用最大流,輸出取反

一開始寫的r-l+1錯了半天。。。

by:大奕哥

1 #include2

using

namespace

std;

3const

int n=10000005,inf=1e9;

4int head[n],d[n],f[n],l[n],r[n],a[n],s=1e9,t,n,k,cnt=-1

,cost;

5bool

v[n];

6struct

nodee[1000005];9

void add(int x,int y,int w,int

c)10

14 queueq;

15bool

spfa()

1631}32

if(d[t]>1e9)return0;

33int flow=inf;

34for(int i=f[t];i!=-1;i=f[e[i].f])

35 flow=min(flow,e[i].w);

36for(int i=f[t];i!=-1;i=f[e[i].f])

37 e[i].w-=flow,e[i^1].w+=flow,cost+=e[i].c*flow;

38return1;

39}40int

main()

4149 sort(a+1,a+1+num);

50 num=unique(a+1,a+1+num)-a-1;51

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

5258

for(int i=1;ii)

59 add(i,i+1,k,0);t=num+1

;60 add(num,t,k,0

);61 add(0,1,k,0);s=0;62

while

(spfa());

63 printf("

%d\n

",-cost);

64return0;

65 }

網路流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可重區間集問題(費用流)

傳送門 考試的時候想到了費用流的一點東西,但是沒有寫出來,現在看來建圖也挺簡單的。s向1,n向t分別連一條容量為k,費用為0的邊,表示最多可以重疊k次 每個點向下乙個點連一條容量為inf,費用為0的邊,表示一種連線關係 對於每個區間,左端點向右端點連邊,容量為1,費用為區間長度 求最大費用最大流即可...