洛谷 P2691 逃離

2022-04-04 21:22:55 字數 1728 閱讀 8717

乙個n×n柵格是由n行和n列頂點組成的乙個無向圖,如圖所示。用(i,j)表示處於第i行第j列的頂點。除了邊界頂點(即滿足i=1,i=n,j=1或j=n的頂點(i,j)),柵格中的所有其他頂點都有四個相鄰的頂點。

給定柵格中的m≤n2個起始點(x1,y1),…, (xm,ym),逃脫問題即確定從起始頂點到邊界上的任何m個相異的頂點之間,是否存在m條頂點不相交的路徑。例如,圖中左邊的柵格包含了乙個逃脫,黑點表示起始點,乙個逃脫路徑由灰線表示;而右邊的柵格則沒有逃脫。

現給定乙個柵格的n和m,以及其中m個起始點的座標,你只需要判斷是否存在逃脫即可。

輸入格式:

輸入檔案為escape.in

第一行是乙個整數,為n (n≤35)。

第二行還是乙個整數,為m。

以下m行,第(i+2)行包含兩個整數xi和yi,表示第i行第j列的點是起始點。輸入資料保證不會出現起始點座標相同的情況。

輸出格式:

輸出檔案為escape.out

只包括一行。若存在逃脫輸出』yes』,不存在逃脫輸出』no』。

輸入樣例#1:

6

102 2

2 42 6

3 13 2

3 43 6

4 24 4

4 6

輸出樣例#1:

yes

網路流屠龍寶刀點選就送

#include #include 

#define n 5000005

using

namespace

std;

int dep[n],nextt[n<<1],to[n<<1],flow[n<<1],head[n],cnt=1,n,m,fx[5]=,fy[5]=;

inline

void ins(int u,int v,int

w)bool bfs(int s,int

t) }

}return

false;}

inline

int min(int a,int b)

int dfs(int now,int t,int

limit)

}if(ret!=limit) dep[now]=-1

;

return

ret;

}int dinic(int s,int

t)int

main()

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

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

for(int k=0;k<4;++k)

}for(int i=1;i<=n;++i) ins(i,t,1),ins(t,i,0

);

for(int i=n*n-n+1;i<=n*n;++i) ins(i,t,1),ins(t,i,0

);

for(int i=n+1;i<=n*n-n;i+=n) ins(i,t,1),ins(t,i,0

);

for(int i=1;i<=n;++i) ins(i*n,t,1),ins(t,i*n,0

);

int ans=dinic(s,t);

if(ans==m) printf("

yes"

);

else printf("no"

);

return0;

}

洛谷 P3393 逃離殭屍島

題目描述 小a住的國家被殭屍侵略了!小a打算逃離到該國唯一的國際空港逃出這個國家。該國有n個城市,城市之間有道路相連。一共有m條雙向道路。保證沒有自環和重邊。k個城市已經被殭屍控制了,如果貿然闖入就會被感染tat 所以不能進入。由其中任意城市經過不超過s條道路就可以到達的別的城市,就是危險城市。換句...

洛谷 P3393 逃離殭屍島

小a住的國家被殭屍侵略了!小a打算逃離到該國唯一的國際空港逃出這個國家。該國有n個城市,城市之間有道路相連。一共有m條雙向道路。保證沒有自環和重邊。k個城市已經被殭屍控制了,如果貿然闖入就會被感染tat.所以不能進入。由其中任意城市經過不超過s條道路就可以到達的別的城市,就是危險城市。換句話說只要某...

洛谷P3393 逃離殭屍島

題目大意 有n個城市m條雙向道路,還有k個已經被殭屍占領的城市,規定 被占領城市不能經過,走不超過s條道路就能到達被占領城市的算危險城市,路費q,其他城市算安全城市,路費p。求從1走到n的最少花費 1和n路費為0 解題思路 我們先跑一遍bfs,求出哪些是危險城市,然後記錄每個城市的路費 貌似int會...