朴实无华的搜索板子题,危险房间即不可达,vis数组直接设为true,建个邻接表直接搜索即可
#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define int long long
#define uint unsigned long long
#define key pair<uint,uint>
using namespace std;
typedef pair<int,int>pii;
const int N=1e5+5;
const int mod=1e9+7;
const int INF=1e18;
int n,m;
vector<int>edge[N];
vector<bool>vis(N,false);
bool get_it=false;
void dfs(int u){
if(u==n){
get_it=true;
return;
}
for(int v:edge[u]){
if(!vis[v]){
vis[v]=true;
dfs(v);
if(get_it)return;
}
}
}
inline void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int temp;
cin>>temp;
if(temp)vis[i]=true;
}
for(int i=0;i<m;i++){
int u,v;
cin>>u>>v;
edge[u].push_back(v);
edge[v].push_back(u);
}
dfs(1);
if(get_it)cout<<"Yes\n";
else cout<<"No\n";
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}

京公网安备 11010502036488号