比赛 2024暑期C班集训3 评测结果 AAAAAAAAAEAEEEETTTTT
题目名称 不是一道路径查询问题 最终得分 50
用户昵称 djyqjy 运行时间 8.852 s
代码语言 C++ 内存使用 11.46 MiB
提交时间 2024-07-03 10:55:04
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=110,M=500010;
  4. int n,m,q;
  5. long long v;
  6. int ver[2*M],hd[N],nxt[2*M];
  7. long long edge[2*M];
  8. int jsq=1;
  9. int goal;
  10. void add(int x,int y,long long val)
  11. {
  12. ver[++jsq]=y;
  13. edge[jsq]=val;
  14. nxt[jsq]=hd[x];
  15. hd[x]=jsq;
  16. return;
  17. }
  18. bool dfs(int x,long long sum,int fa)
  19. {
  20. if(sum<v) return false;
  21. if(x==goal) return true;
  22. for(int i=hd[x];i;i=nxt[i])
  23. if(ver[i]!=fa&&dfs(ver[i],sum&edge[i],x)) return true;
  24. return false;
  25. }
  26. int main()
  27. {
  28. freopen("Paths.in","r",stdin);
  29. freopen("Paths.out","w",stdout);
  30. scanf("%d%d%d%lld",&n,&m,&q,&v);
  31. for(int i=1;i<=m;i++)
  32. {
  33. int a,b;
  34. long long c;
  35. scanf("%d%d%lld",&a,&b,&c);
  36. add(a,b,c);
  37. add(b,a,c);
  38. }
  39. for(int i=1;i<=q;i++)
  40. {
  41. int a;
  42. scanf("%d%d",&a,&goal);
  43. bool flag=0;
  44. for(int i=hd[a];i;i=nxt[i])
  45. {
  46. if(dfs(ver[i],edge[i],a))
  47. {
  48. flag=1;
  49. printf("Yes\n");
  50. break;
  51. }
  52. }
  53. if(!flag) printf("No\n");
  54. }
  55. return 0;
  56. }