luoguP4142 洞穴遇險

2022-05-08 01:27:07 字數 1986 閱讀 4536

戳我

這種用來拼接的奇形怪狀的東西,要不就是輪廓線\(dp\),要不就是網路流。

為了表示奇數點(即\((x+y)\%2=1\))的危險值,把該點拆為兩個點,連一條邊長為該點危險值相反數的邊(兩點分別稱為起點和終點)。

鑑於一根柱子跨越\(3\)個格仔,其中一點為奇數點,另外兩個點都是偶數點,不能區分。

於是也要把偶數點分為兩類(不用拆點)。一類連源點,一類連匯點。連匯點的一類連奇數點的起點,另一類連終點。(讓源點出發能到匯點就成)

然後思考如何表示柱子。

如果強行給柱子規定方向,則有\(8\)個方向。

表示出來,有兩種情況,一是\(x\)軸方向出,\(y\)軸方向進;另一種是\(y\)軸方向進,\(x\)軸方向出。

於是兩個奇數點分別反映一種情況,同時注意相鄰的偶數點連奇數點中的起點、還是終點即可。

還要注意的是,最小費用最大流模板求出的是在最大流前提下的最小流,在後期,可能為了得到最大流而付出更多費用(在本題中就是為了放更多柱子而增加不穩定度)。在費用開始非負時(開始退流時)記得\(break\)。

唯一一種能讓網路流tle的方式就是cnt=0

// luogu-judger-enable-o2

#include#include#include#include#include#include#include#include#define re register

#define il inline

#define ll long long

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

#define fp(i,a,b) for(re int i=a;i<=b;i++)

#define fq(i,a,b) for(re int i=a;i>=b;i--)

using namespace std;

const int mod=1e9+7,n=5e3+100;

struct edgee[n*10];

int n,m,k,s,sum,h[n],d[55][55],ans=0,dis[n],s,t,pe[n],pv[n],tot,cnt=1,g;

bool vis[n],ban[55][55];

il void add(re int u,re int v,re int w,re int c)

;h[u]=cnt;

e[++cnt]=(edge);h[v]=cnt;

}queueq;

il ll gi()

il int id(re int x,re int y)

il int spfa()

}vis[u]=0;

}return dis[t]1&&!ban[i-1][j]) add(id(i,j)+g,id(i-1,j),1,0);

if(i1&&!ban[i][j-1]) add(id(i,j-1),id(i,j),1,0);

if(j1&&!ban[i-1][j]) add(id(i-1,j),id(i,j),1,0);

if(i1&&!ban[i][j-1]) add(id(i,j)+g,id(i,j-1),1,0);

if(j=0) break;

sum=2e9;

for(re int i=t;i!=s;i=pv[i])

sum=min(sum,e[pe[i]].w);m-=sum;//printf("%d\n",sum);

for(re int i=t;i!=s;i=pv[i])

e[pe[i]].w-=sum,e[pe[i]^1].w+=sum,ans+=sum*e[pe[i]].c;

}printf("%d\n",s+ans);

fclose(stdin);

fclose(stdout);

return 0;

}

檔案排版4 14

寫電子郵件是有趣的,但不幸的是經常寫不好看,主要是因為所有的行不一樣長,你的上司想要發排版精美的電子郵件,你的任務是為他編寫乙個電子郵件排版程式。完成這個任務最簡單的辦法是在太短的行中的單詞之間插入空格,但這並不是最好的方法,考慮如下例子 this is the example you are ac...

4 14 學習筆記

1.雙階乘的質因數個數 之前想要開陣列,把所有1到10000的雙階乘值都存好,然後再寫乙個函式算出質因子個數,最後悲劇了 換個思路,每個因數中分別有多少個質因數m,相加就好啦 includeusing namespace std int t,n,m,tmp,cnt int main cout inc...

工作日誌4 14

工作日誌4 14 1 了解sping工作流程描述 1 使用者向伺服器傳送請求,請求被spring 前端控制 servlet dispatcherservlet 捕獲 2 dispatcherservlet對請求 url進行解析,得到請求資源標示符 url 然後根據該 url,呼叫 獲得該handle...