1 条题解

  • 0
    @ 2024-2-8 14:27:59
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,query;
    int head[100011],ver[200011],Next[200011],tot=-1;
    int dist[100011][2];
    queue<pair<int,int> >Q;
    void ADD(int x,int y){
        ver[++tot]=y;
        Next[tot]=head[x];
        head[x]=tot;
    }
    void bfs(){
        int x,y,t;
        memset(dist,0x3f,sizeof(dist));
        Q.push(make_pair(1,0));
        dist[1][0]=0;
        while(Q.size()){
            int x=Q.front().first,t=Q.front().second;
            Q.pop();
            for(int i=head[x];~i;i=Next[i]){
                y=ver[i];
                if (dist[y][t^1]>dist[x][t]+1){
                    dist[y][t^1]=dist[x][t]+1;
                    Q.push(make_pair(y,t^1));
                }
            }
        }
    }
    int main(){
        int x,y;
        cin>>n>>m>>query;
        memset(head,-1,sizeof(head));
        for(int i=1;i<=m;i++){
            cin>>x>>y;
            ADD(x,y);
            ADD(y,x);
        }
        bfs();
        while(query--){
            int A,B;
            cin>>A>>B;
            if(A==1&&head[1]==-1) cout<<"Yes"<<endl;
            else if(dist[A][B&1]<=B) cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
        return 0;
    }
    

    信息

    ID
    66
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    6
    已通过
    6
    上传者