比赛 2024暑期C班集训3 评测结果 WWWWWWWWWWWWEEEEEEEE
题目名称 不是一道路径查询问题 最终得分 0
用户昵称 flyfree 运行时间 1.459 s
代码语言 C++ 内存使用 5.39 MiB
提交时间 2024-07-03 11:04:40
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1005
#define ll long long
ll n,m,q,v,idx;
ll hd[MAXN],nxt[MAXN],ed[MAXN],val[MAXN],maxn[MAXN][MAXN];
struct node{
    ll num,val;
};
bool operator <(const node &a,const node &b){
    return a.num<b.num;
}
std::map<node,bool> mapz;
void build(ll x,ll y,ll z){
    nxt[++idx]=hd[x];
    ed[idx]=y;
    val[idx]=z;
    hd[x]=idx;
}
void SPFA(ll root){
    queue<node> q;
    q.push((node){root,(1<<61)-1});
    while(!q.empty()){
        node fst=q.front();
//        cout<<fst.num<<" "<<fst.val<<endl;
        q.pop();
        if(mapz[fst])continue;
        mapz[fst]=1;
        for(ll i=hd[fst.num];i;i=nxt[i]){
            ll y=ed[i];
//            cout<<fst.num<<" "<<y<<" "<<val[i]<<" "<<fst.val <<" "<<(fst.val&val[i])<< endl;
            if(mapz[(node){y,fst.val&val[i]}]==0)q.push((node){y,fst.val&val[i]});
            maxn[root][y]=max(maxn[root][y],fst.val&val[i]);
            maxn[y][root]=max(maxn[y][root],fst.val&val[i]);
        }
    }
}
int  main(){
    freopen("Paths.in","r",stdin);
    freopen("Paths.out","w",stdout);
    cin>>n>>m>>q>>v;
    for(ll i=1;i<=m;i++){
        ll x,y,z;
        cin>>x>>y>>z;
        build(x,y,z);
        build(y,x,z);
    }
    for(ll i=1;i<=n;i++){
//        memset(mapz,0,sizeof(mapz)); 
        mapz.clear();
        SPFA(i);
    }
//    for(ll i=1;i<=n;i++){
//        for(ll j=1;j<=n;j++){
//            cout<<maxn[i][j]<<" ";
//        }
//        cout<<endl;
//    }
    for(ll i=1;i<=q;i++){
        ll x,y;
        cin>>x>>y;
        if(maxn[x][y]>=v)cout<<"YES\n";
        else cout<<"NO\n";
    }
    return 0;
}