题解:P11580 [CCC2020] Escape Room
KukCair
·
·
题解
搜索。
对于每个位置 (i, j),让 i \times j 向 num_{i, j} 连一条边,所以起点为 1,终点为 n \times m。
然后 bfs/dfs 即可。
```cpp
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int m, n;
bool f[1000005];
vector<int> vc[1000005];
void bfs(){
queue<int> q;
q.push(1);
f[1] = 1;
while(q.size()){
int fr = q.front();
q.pop();
for(int i = 0; i < vc[fr].size(); i++){
int v = vc[fr][i];
if(f[v]) continue;
f[v] = 1;
q.push(v);
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> m >> n;
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
int num;
cin >> num;
vc[i * j].push_back(num);
}
}
bfs();
if(f[n * m]) cout << "yes";
else cout << "no";
return 0;
}
```