luogu P2045 方格取數加強版

2021-08-19 06:50:06 字數 952 閱讀 5391

題目傳送門:

題意:

有乙個n*n的矩陣,每乙個點都有對應的權值,現在你可以走k次,求你能獲得的最大價值。注意:每個點選完之後權值變為0。

思路:

最大費用最大流啊。

1.因為只能選k次,所以開乙個超級源點和超級匯點,分別連向(1,1)和(n,n),流量為k。

2.因為每個點的權值只能選一次,所以拆點。

[1]每乙個點x向x'建一條流量為1,費用為點x的價值的邊(因為每乙個點的權值只能被選一次);

[2]每乙個點x向x'建一條流量為無限大,費用為0的邊(因為乙個點可以走多次);

3.每乙個點向它四周的點連一條流量為無限大,費用為0的邊(因為乙個點可以走到另乙個點走多次)。

最後再跑最大費用最大流即可。

**:

#include#include#include#include#include#define inf 2147483647

using namespace std;

queuef;

int n,k,len=-1,st,ed;

struct node a[100010];

int last[5010],dis[5010],pre[5010],pos[5010],p[5010];

bool bz[5010];

void ins(int x,int y,int c,int d)

bool spfa()

}} f.pop();

} return dis[ed]<1061109567;

}int flow()

} return ans;

}int main()

printf("%d",-flow());

}

luogu P1004 方格取數

設有n n的方格圖 n 9 我們將其中的某些方格中填入正整數,而其他的方格中則放 人數字0。如下圖所示 見樣例 a 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 ...

P2045 方格取數加強版

給出乙個n n的矩陣,每一格有乙個非負整數aij,aij 1000 現在從 1,1 出發,可以往右或者往下走,最後到達 n,n 每達到一格,把該格仔的數取出來,該格仔的數就變成0,這樣一共走k次,現在要求k次所達到的方格的數的和最大 輸入格式 第一行兩個數n,k 1 n 50,0 k 10 接下來n...

LGP2045 方格取數加強版

題目 還糾結了一下是費用流還是最小割 最終還是決定讓最小割去死吧 我們的問題就是讓乙個點的點權只被計算一次 考慮拆點 將所有點拆成入點和出點,入點向出點連流量為 1 的邊 每乙個出點往下連能到達的點,向入點連費用為該點點權容量為 0 的邊,向出點連費用為 0 容量為 k 1 的邊 這樣我們就能保證乙...