比赛 |
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;
}