對於每個點向後乙個點連流量為k費用為0的邊
對每一區間連l到r流量為1費用為r-l的邊
然後最小費用最大流,輸出取反
一開始寫的r-l+1錯了半天。。。
by:大奕哥
1 #include2using
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,費用為區間長度 求最大費用最大流即可...