BZOJ3996 線性代數 最小割

2021-07-10 15:16:59 字數 1211 閱讀 9521

目標: an

s=mi

n∑i=

1na1

,i(∑

j=1n

a1,j

∗bj,

i−c1

,i)

化簡得到 an

s=mi

n∑i=

1n∑j

=1na

1,i∗

a1,j

∗bi,

j−∑i

=1na

1,i∗

c1,i

而ai=0,1

,因此轉化為這個模型:

又n個物品,如果物品i,j都選取,獲得bi

,j的利潤,而選取物品i,j分別花費ci

,cj 的代價。這是乙個最小割的模型。

源點向(i,

j)連邊,容量為bi

,j ,(

i,j)

向i,j連邊,容量為inf,i,j向匯點連邊,容量為ci

,cj ,求出來的最小割也就是花費的最小代價,用總利潤減去最小代價也就是最大獲利。

#include

#include

#include

#include

#define inf 0x7fffffffll

#define maxn 300010

using

namespace

std;

typedef

long

long ll;

inline ll min(ll a,ll b)

e(int a,ll b,int c)

};vector

g[maxn];

void add(int u,int v,ll w)

int d[maxn],vd[maxn],n,b[510][510],c[510],s,t,n;

ll sum,flow;

ll aug(int i,ll augco)

if(d[v] < mind) mind = d[v];}}

if(augco == augc)

return augco-augc;

}void sap()

int main()

for(int i = 1; i <= n; i++)

n = n+n*n+2;

sap();

cout

<}

BZOJ 3996 TJOI2015 線性代數

給出乙個n n的矩陣b和乙個1 n的矩陣c。求出乙個1 n的01矩陣a.使得 d a b c a t最大。其中a t為a的轉置。輸出d 第一行輸入乙個整數n,接下來n行輸入b矩陣,第i行第j個數字代表bij.接下來一行輸入n個整數,代表矩陣c。矩陣b和矩陣c中每個數字都是不超過1000的非負整數。輸...

bzoj3996 TJOI2015 線性代數

首先轉化題目 給你n 個物品,可以選或不選。選第i 個物品需要c i 的代價。同時選第 i 和第 j個物品獲得b i j 的收益 問最大收益。網路流建圖 考慮s um ni 1 nj 1b i j 剩下就變成了算代價最小 也就是最小割 建點 i,j 和i,對於每個點 i j 向 i,j 連一條容量為...

bzoj3996 TJOI2015 線性代數

description 給出乙個n n的矩陣b和乙個1 n的矩陣c。求出乙個1 n的01矩陣a.使得 d a b c a t最大。其中a t為a的轉置。輸出d input 第一行輸入乙個整數n,接下來n行輸入b矩陣,第i行第j個數字代表bij.接下來一行輸入n個整數,代表矩陣c。矩陣b和矩陣c中每個...