为什么会超时
查看原帖
为什么会超时
858145
hdmgydkn楼主2024/5/5 10:31
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#define R read<size_t>()
#define MAXN 1000005
template<typename T> inline T read(){T x=0;char c=(char)getchar();while(c>'9'||c<'0') c=(char)getchar();while(c<='9'&&c>='0'){x=(x<<1)+(x<<3)+(T)(c^48);c=(char)getchar();}return x;}//快读
size_t n,m,q,beg[MAXN<<1],nex[MAXN<<1],to[MAXN<<1],dis[MAXN<<1],cnt,f,t,a,l;
void add_edge(size_t f,size_t t){to[++cnt]=t,nex[cnt]=beg[f],beg[f]=cnt;}
void dijkstra(){
    memset(dis,0x7f,sizeof(dis));
    size_t u;
    priority_queue<pair<size_t,size_t>> q;
    q.push({0,1}),dis[1]=0;
    while(!q.empty()){
        u=q.top().second;q.pop();
        for(size_t i=beg[u];i;i=nex[i])
            if(dis[u]+1<dis[to[i]])
                dis[to[i]]=dis[u]+1,q.push({dis[to[i]],to[i]});
    }
}
int main(){
    n=R,m=R,q=R;
    while(m--){
        f=R,t=R;
        add_edge(f,n+t),add_edge(t,n+f);
        add_edge(n+f,t),add_edge(n+t,f);
    }
    dijkstra();
    while(q--){
        a=R,l=R;
        if(dis[a+(l&1)*n]<=l) puts("Yes");
        else puts("No");
    }
    return 0;
}

这是按老师给的思路写的,为啥会超时

2024/5/5 10:31
加载中...