比赛 EYOI与SBOI开学欢乐赛5th 评测结果 AWWAW
题目名称 SERNET模拟 最终得分 40
用户昵称 ZRQ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2022-09-16 21:35:41
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct package
  4. {
  5. int id,stm,v;
  6. };
  7. const int N=103500;
  8. int n,m,k,t;
  9. int id[N];
  10. int hd[N],e[N<<1],nt[N<<1],w[N<<1],res,ans,idx;
  11. int dis[N];
  12. bool vis[N];
  13. bool done[N*1000];
  14. vector<package> p[N];
  15. inline void add(int x,int y,int z)
  16. {
  17. nt[++idx]=hd[x],hd[x]=idx,e[idx]=y,w[idx]=z;
  18. }
  19. void BFS(int s)
  20. {
  21. queue<int> q;
  22. memset(dis,0,sizeof(dis));
  23. q.push(s);
  24. vis[s]=1;
  25. while(!q.empty())
  26. {
  27. int nw=q.front();
  28. q.pop();
  29. for(int i=hd[nw];i;i=nt[i])
  30. {
  31. dis[e[i]]=max(dis[e[i]],dis[nw]+w[i]);
  32. if(!vis[e[i]]) q.push(e[i]),vis[e[i]]=1;
  33. }
  34. }
  35. res=0;
  36. for(int i=1;i<=n;++i) res=max(res,dis[i]);
  37. return ;
  38. }
  39. int main()
  40. {
  41. freopen("sernet.in","r",stdin);
  42. freopen("sernet.out","w",stdout);
  43. scanf("%d",&n);
  44. for(int i=1,x;i<=n;++i) scanf("%d",&x),id[x]=i;
  45. scanf("%d",&m);
  46. for(int i=1,x,y,z;i<=m;++i) scanf("%d%d%d",&x,&y,&z),add(id[x],id[y],z),add(id[y],id[x],z);
  47. scanf("%d",&k);
  48. for(int i=1,j,tm,st,ed;i<=k;++i)
  49. {
  50. scanf("%d%d%d%d",&j,&tm,&st,&ed);
  51. p[id[st]].push_back((package){j,tm,id[ed]});
  52. }
  53. scanf("%d",&t);
  54. for(int i=1;i<=n;++i)
  55. {
  56. BFS(i);
  57. for(int j=0;j<p[i].size();++j)
  58. if(res+p[i][j].stm>t&&!done[p[i][j].id]) ++ans,done[p[i][j].id]=1;
  59. }
  60. printf("%d",ans);
  61. return 0;
  62. }