Intervals poj3680 最小費用最大流

2021-08-28 10:28:48 字數 1743 閱讀 7668

題目大意:

給你一些開區間,讓你選擇一些區間(開區間),使得沒有乙個數字出現的次數超過k次的情況下,獲得的價值最大。

分析:首先將輸入的區間離散化,之後對於相鄰的節點,連一條容量為inf,費用為0的邊,之後對於每乙個區間,加一條容量為1,花費為-的w[i]的邊。源點和1之間建立一條容量為k,花費為0的邊,在m與匯點間建立一條容量為k的邊。

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int maxn =

400+10;

const

int inf =

0x3f3f3f3f

;struct edge

;struct mcmf

void

addedge

(int from,

int to,

int cap,

int cost));

edges.

push_back

((edge));

m=edges.

size()

; g[from]

.push_back

(m-2);

g[to]

.push_back

(m-1);

} bool bellmanford

(int s,

int t,

int&flow,

int& cost)}}

}if(d[t]

==inf)

return false;

flow+

=a[t]

; cost+

=d[t]

*a[t]

;int u=t;

while

(u!=s)

return true;

}int

mincost

(int s,

int t)

}d;int temp[maxn]

;struct node

s[maxn]

;int

main()

sort

(temp,temp+cnt)

;int m=

unique

(temp,temp+cnt)

-temp;

int s_=

0,t=m+1;

d.init

(m+1);

for(

int i=

1;i) d.

addedge

(i,i+

1,inf,0)

; d.

addedge

(s_,

1,k,0)

; d.

addedge

(m,t,k,0)

;for

(int i=

0;i)int ans = d.

mincost

(s_,t)

;printf

("%d\n"

,-ans);}

return0;

}

368 最大整除子集

給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 si,sj 都要滿足 si sj 0 或 sj si 0。如果有多個目標子集,返回其中任何乙個均可。示例 1 輸入 1,2,3 輸出 1,2 當然,1,3 也正確 示例 2 輸入 1,2,4,8 輸出 1,2,4,8 思路 ...

368 最大整除子集

給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 si,sj 都要滿足 si sj 0 或 sj si 0。如果有多個目標子集,返回其中任何乙個均可。示例 1 輸入 1,2,3 輸出 1,2 當然,1,3 也正確 示例 2 輸入 1,2,4,8 輸出 1,2,4,8 自己寫...

交叉編譯Python 3 6 8

安裝 python3.6 安裝 交叉編譯器 按實際工程安裝對應版本,這裡是gcc 版本 8.2.1 20180802 gnu toolchain for the a profile architecture 8.2 2018 08 arm rel 8.23 注意需要在pc中安裝python3.6 注...