csuoj 1355 地雷清除計畫

2022-05-18 15:42:15 字數 1495 閱讀 3256

這是乙個非常神奇的題;

感覺像乙個模擬搜尋;

但是竟然可以用網路流來解決;

直接粘題解把:

如果不能走通的話,必然說明能夠從右上角(圖外面)沿雷「跳」 ,一直可以「跳」左

下角(圖外面) ,因此建好圖之後求乙個最小割就可以得到結果了。但是關鍵在於:1.哪些

雷之間可以相互「跳」 ?2.哪些雷可以從右上角「跳」過去,哪些雷可以「跳」到左下角?

第二個問題很好辦,如果地雷的範圍能接觸到最上或者最右的格仔,就可以從右上角跳

到這個雷上,如果地雷的範圍能接觸到最下或者最右的格仔,就可以跳到左下角。

第乙個問題需要分類討論一下,如果兩個雷在同一水平線或者豎直線上,當兩個雷的距

離不超過 2*k+1 時可以認為兩個雷是連通的,但如果不在同一水平線或者豎直線上時,當

兩個雷的距離不超過 2*k+2 時可以認為兩個雷是連通的。

注意雷要拆點,容量為 1,其他邊容量為 inf

**:

#include#include

#include

#include

#define maxn 1550

#define maxm 40009

#define inf 9999999

using

namespace

std;

struct

edge

edge(

intfrom,int to,int cap,int

flow)

:from(from

),to(to),cap(cap),flow(flow) {}};

struct

dinic

void addedge(int

from,int to,int

cap)

bool

bfs()}}

return0;

}int dfs(int u,int

a)

}return

flow;

}int maxflow(int s,int

t)

return

flow;

}};

dinic solve;

struct

node

no[maxn];

char s[100

];int

main()}}

int sr=0

;

int tr=2*cnt+1

; solve.init(

2*cnt+2

);

for(int i=1; i)

for(int i=1; i)

for(int j=1; j)

else

}printf(

"%d\n

",solve.maxflow(sr,tr));

}return0;

}

view code

CSU OJ 集訓難度(線段樹)

小l正在組織acm暑假集訓,但眾所周知,暑假集訓的萌新中有oi神犇,也有暑假才開始學演算法的萌新,如果統一集訓的難度,無法很好地讓萌新們得到訓練,所以小l想了乙個辦法,根據每次測試的情況,改變萌新們的集訓難度。現在將萌新們編號為1到n,最初萌新們的集訓難度為v0,測試後有兩種操作,第一種是某一區間的...

135 取石子(二)

小王喜歡與同事玩一些小遊戲,今天他們選擇了玩取石子。遊戲規則如下 共有n堆石子,已知每堆中石子的數量,並且規定好每堆石子最多可以取的石子數 最少取1顆 兩個人輪流取子,每次只能選擇n堆石子中的一堆,取一定數量的石子 最少取乙個 並且取的石子數量不能多於該堆石子規定好的最多取子數,等哪個人無法取子時就...

CSUOJ 1511 殘缺的棋盤

time limit 1 sec memory limit 128 mb submit 169 solved 56 submit status web board 輸入包含不超過10000 組資料。每組資料報含6個整數r1,c1,r2,c2,r3,c3 1 r1,c1,r2,c2,r3,c3 8 三...