比赛 2024暑期C班集训3 评测结果 AAAAAAAAAAAAEEEEEEEE
题目名称 不是一道路径查询问题 最终得分 60
用户昵称 小金 运行时间 1.428 s
代码语言 C++ 内存使用 11.51 MiB
提交时间 2024-07-03 10:31:30
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n,m,q,h[1010],v[1000010],ne[1000010],tot,b[1010];
long long d[1010][1010]={},ma,e[1000010];
void add(int x,int y,long long z)
{
    tot++;
    v[tot]=y;
    e[tot]=z;
    ne[tot]=h[x];
    h[x]=tot;
    tot++;
    v[tot]=x;
    e[tot]=z;
    ne[tot]=h[y];
    h[y]=tot;
}
void spfa(int now)
{
    queue<int> q; 
    memset(b,0,sizeof(b));
    d[now][now]=0;
    for(int i=h[now];i;i=ne[i])
    {
        int y=v[i];
        d[now][y]=e[i];
        q.push(y);
        b[y]=1;
    }
    while(q.size())
    {
        int x=q.front();
        q.pop();
        b[x]=0;
        for(int i=h[x];i;i=ne[i])
        {
            int y=v[i];
            long long s=d[now][x]&e[i];
            if(d[now][y]<s)
            {
                d[now][y]=s; 
                if(!b[y])
                {
                    q.push(y);
                    b[y]=1;
                }
            }
        }
    }
}
int main()
{
    freopen("Paths.in","r",stdin);
    freopen("Paths.out","w",stdout);
    scanf("%d%d%d%lld",&n,&m,&q,&ma);
    for(int i=1;i<=m;i++)
    {
        int nu,nv;
        long long w;
        scanf("%d%d%lld",&nu,&nv,&w);
        add(nu,nv,w);
    }
    for(int i=1;i<=n;i++)
    {
        spfa(i);
    }
    for(int i=1;i<=q;i++)
    {
        int nu,nv;
        scanf("%d%d",&nu,&nv);
        if(d[nu][nv]>=ma||d[nv][nu]>=ma) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}