比赛 2024暑期C班集训3 评测结果 AAAAAAAAAEAEEEETTTTT
题目名称 不是一道路径查询问题 最终得分 50
用户昵称 djyqjy 运行时间 8.852 s
代码语言 C++ 内存使用 11.46 MiB
提交时间 2024-07-03 10:55:04
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=110,M=500010;
int n,m,q;
long long v;
int ver[2*M],hd[N],nxt[2*M];
long long edge[2*M];
int jsq=1;
int goal;
void add(int x,int y,long long val)
{
    ver[++jsq]=y;
    edge[jsq]=val;
    nxt[jsq]=hd[x];
    hd[x]=jsq;
    return;
}
bool dfs(int x,long long sum,int fa)
{
    if(sum<v) return false;
    if(x==goal) return true;
    for(int i=hd[x];i;i=nxt[i])
        if(ver[i]!=fa&&dfs(ver[i],sum&edge[i],x)) return true;
    return false;
}
int main()
{
    freopen("Paths.in","r",stdin);
    freopen("Paths.out","w",stdout);
    scanf("%d%d%d%lld",&n,&m,&q,&v);
    for(int i=1;i<=m;i++)
    {
        int a,b;
        long long c;
        scanf("%d%d%lld",&a,&b,&c);
        add(a,b,c);
        add(b,a,c);
    }
    for(int i=1;i<=q;i++)
    {
        int a;
        scanf("%d%d",&a,&goal);
        bool flag=0;
        for(int i=hd[a];i;i=nxt[i])
        {
            if(dfs(ver[i],edge[i],a))
            {
                flag=1;
                printf("Yes\n");
                break;
            }
        }
        if(!flag) printf("No\n");
    }
    return 0;
}