題意描述:給你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 ...