傳送門
考試的時候想到了費用流的一點東西,但是沒有寫出來,現在看來建圖也挺簡單的。
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...