乙個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:
6102 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會...