poj pku 3680 最小費用最大流

2021-05-28 09:58:10 字數 947 閱讀 1279

題意描述:給你n(n<=200)個區間,每個區間有乙個權值,且每個區間的實數點最多只能訪問k次,現在讓你選擇區間使得所選權值和最大

**:

#include#include#include#includeusing namespace std;

const int n=410;

const int e=20000;

const int inf=0x3fffffff;

struct node

edge[e];

int head[n],e;

int src,sin;

struct node1

a[n/2];

int b[n];

void addedge(int x,int y, int w, int c)

int find(int x,int high)}}

isque[u]=false;

}if(dis[sin]==inf)break;

int p,min=inf;

for(u=sin;u!=src;u=edge[pre[u]].x)

flow+=min;

cost+=min*dis[sin];

for(u=sin;u!=src;u=edge[pre[u]].x)

}}int main ()

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

for(i=2,j=2;i<=2*n;i++)

if(b[i]!=b[i-1])

b[j++]=b[i];

sin=j;src=0;

for(i=0;iy)swap(x,y);

addedge(x,y,1,-a[i].c);

}mincmaxf();

printf("%d\n",-cost);

}return 0;

}

Intervals poj3680 最小費用最大流

題目大意 給你一些開區間,讓你選擇一些區間 開區間 使得沒有乙個數字出現的次數超過k次的情況下,獲得的價值最大。分析 首先將輸入的區間離散化,之後對於相鄰的節點,連一條容量為inf,費用為0的邊,之後對於每乙個區間,加一條容量為1,花費為 的w i 的邊。源點和1之間建立一條容量為k,花費為0的邊,...

poj 3680(最小費用流)

傳送門 問題 數軸上有若干個帶權值的閉區間 劉汝佳藍書p367寫的是左閉右開區間,個人根據樣例資料和解法推測應該是筆誤 選出一些區間使權值和盡量大且任意乙個數均被覆蓋k次 題解 經典的最小費用流模型,連邊方法寫在 開頭,具體為什麼要這樣連邊本蒟蒻也不易表述清楚,但是在紙上模擬幾組資料發現確實是對的,...

poj 3680 最小費用最大流

思路 因為n 200,而區間範圍為 1,100000 因此需要離散化,去重,然後就是建圖了相連兩點連邊,容量為k,費用為0,然後就是對區間端點進行連邊,容量為1,費用為權值,最後就是跑費用流了。1 include2 include3 include4 include5 include6 using ...