比赛 2024暑期C班集训3 评测结果 WWWWWWAATTTTTTEEEEEE
题目名称 不是一道路径查询问题 最终得分 10
用户昵称 彭欣越 运行时间 8.591 s
代码语言 C++ 内存使用 11.41 MiB
提交时间 2024-07-03 11:08:22
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
int n,m,q,tot,flag,mk[100010],a,b;
ll V,ans;
struct node {
    int head,nxt,idx;
    ll val;
}e[500010];
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;
}
void dfs (int u,ll res) {
    if (u==b) {
        ans=max(ans,res);
        if (res>=V) flag=1;
        return;
    }
    for (int i=e[u].head;i;i=e[i].nxt) {
        if (mk[i]==1) continue;
        if (res==0&&u==a) {
            if (e[i].val<=ans) continue;
            mk[i]=1;
            dfs(e[i].idx,e[i].val);
            mk[i]=0;
        }else{
            if (res&e[i].val<=ans) continue;
            mk[i]=1;
            dfs(e[i].idx,res&e[i].val);
            mk[i]=0;
        }
        if (flag==1) return;
    }
}
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;
        dfs(a,0);
        if (flag==1) cout << "Yes" <<endl;
        else cout << "No" <<endl;
    }
    return 0;
}