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