朴实无华的搜索板子题,危险房间即不可达,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;
}