记录编号 589120 评测结果 AAAAAAAAATAATTTTTTTT
题目名称 不是一道路径查询问题 最终得分 55
用户昵称 Gravatar彭欣越 是否通过 未通过
代码语言 C++ 运行时间 9.158 s
提交时间 2024-07-03 14:55:41 内存使用 16.22 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
int n,m,q,tot,flag,mk[1000010],a,b;
ll V,ans;
struct node {
    int head,nxt,idx;
    ll val;
}e[1000010];
void add (int u,int v,ll w) {
    e[++tot].val=w;
    e[tot].idx=v;
    e[tot].nxt=e[u].head;
    e[u].head=tot;
}
bool dfs (int u,ll res) {
    if (res<V) return false;
    if (u==b) return true;
    for (int i=e[u].head;i;i=e[i].nxt) {
        if (mk[i]==1) continue;
        mk[i]=1;
        if (dfs(e[i].idx,res&e[i].val)) {
            mk[i]=0;
            return true;
        }
        mk[i]=0;
    }
    return false;
}
int main () {
    freopen("Paths.in","r",stdin);
    freopen("Paths.out","w",stdout);
    cin >> n >> m >> q >> V;
    for (int i=1;i<=m;i++) {
        int u,v;
        ll w;
        cin >> u >> v >> w;
        add(u,v,w);
        add(v,u,w);
    }
    while (q--) {
        cin >> a >> b;
        flag=0;
        for (int i=e[a].head;i;i=e[i].nxt) {
            if (dfs(e[i].idx,e[i].val)) {
                flag=1;
                cout << "Yes" <<endl;
                break;
            }
        }
        if(!flag) cout << "No" <<endl;
    }
    return 0;
}