BZOJ3144 Hnoi2013 切糕 最小割

2022-05-08 03:15:08 字數 1199 閱讀 7824

第一行是三個正整數p,q,r,表示切糕的長p、 寬q、高r。第二行有乙個非負整數d,表示光滑性要求。接下來是r個p行q列的矩陣,第z個 矩陣的第x行第y列是v(x,y,z) (1≤x≤p, 1≤y≤q, 1≤z≤r)。 

100%的資料滿足p,q,r≤40,0≤d≤r,且給出的所有的不和諧值不超過1000。

僅包含乙個整數,表示在合法基礎上最小的總不和諧值。

2 2 2

1 6 1

6 1

2 6

2 6

6最佳切面的f為f(1,1)=f(2,1)=2,f(1,2)=f(2,2)=1

根據題意顯然我們需要在二維平面的每個座標上刪除乙個點。刪除點不好辦,我們將點轉化成邊:將第三維座標為$z$的點變成連線第$z$層與第$z+1$層的邊,即連線$(x,y,z)$與$(x,y,z+1)$,流量為$v(x,y,z)$,然後源點連向第一層的點,最後一層的點連向匯點。如果不考慮$d$的限制,直接按上述連邊跑最小割即可。但現在考慮$d$的限制,我們將$(x,y,z)$連向$(x',y',z-d)$,流量為$inf$表示這條邊不能被割。可以發現如果相鄰兩個座標割的邊第三維座標差大於$d$時,就可以有流量繞過被割的邊從相鄰座標的邊流過去。

#include#include#include#include#include#include#include#include#include#include#include#define inf 1000000000

using namespace std;

int head[70000];

int next[800000];

int to[800000];

int val[800000];

int d[70000];

int q[70000];

int n,m,r,d;

int f[50][50][50];

int tot=1;

int ans;

int s,t;

int dx[7]=;

int dy[7]=;

void add(int x,int y,int v)

bool bfs(int s,int t)}}

add(calc(i,j,r+1),t,inf);

} }dinic();

printf("%d",ans);

}

BZOJ 3144 網路流最小割 解題報告

3144 hnoi2013 切糕 第一行是三個正整數p,q,r,表示切糕的長p 寬q 高r。第二行有乙個非負整數d,表示光滑性要求。接下來是r個p行q列的矩陣,第z個 矩陣的第x行第y列是v x,y,z 1 x p,1 y q,1 z r 100 的資料滿足p,q,r 40,0 d r,且給出的所有...

bzoj 2326 HNOI2011 數學作業

題目大意 給你n,m,求concatenate 1.n mod m的值 concatenate 1.n 代表把1到n連起來 比如n 13時 concatenate 1.n 就是12345678910111213 n 10 1 m 10 9 這題很水,對於n,將其分開,比如145,就分成1 9,10 ...

BZOJ1010 HNOI2008 玩具裝箱toy

先把程式放著,週末來更新 華麗的分割線 不想寫題解了。照著網上的題解推一邊即可 注意有的題解最後推倒出來明明是求上 下 凸包的形式,但配的圖卻是下 上 凸包的。不過斜率優化還不是搞的很懂。time limit 1 sec memory limit 162 mb submit 6661 solved ...