比赛 |
EYOI与SBOI开学欢乐赛5th |
评测结果 |
AWWAW |
题目名称 |
SERNET模拟 |
最终得分 |
40 |
用户昵称 |
ZRQ |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-09-16 21:35:41 |
显示代码纯文本
- #include<bits/stdc++.h>
- using namespace std;
- struct package
- {
- int id,stm,v;
- };
- const int N=103500;
- int n,m,k,t;
- int id[N];
- int hd[N],e[N<<1],nt[N<<1],w[N<<1],res,ans,idx;
- int dis[N];
- bool vis[N];
- bool done[N*1000];
- vector<package> p[N];
- inline void add(int x,int y,int z)
- {
- nt[++idx]=hd[x],hd[x]=idx,e[idx]=y,w[idx]=z;
- }
- void BFS(int s)
- {
- queue<int> q;
- memset(dis,0,sizeof(dis));
- q.push(s);
- vis[s]=1;
- while(!q.empty())
- {
- int nw=q.front();
- q.pop();
- for(int i=hd[nw];i;i=nt[i])
- {
- dis[e[i]]=max(dis[e[i]],dis[nw]+w[i]);
- if(!vis[e[i]]) q.push(e[i]),vis[e[i]]=1;
- }
- }
- res=0;
- for(int i=1;i<=n;++i) res=max(res,dis[i]);
- return ;
- }
- int main()
- {
- freopen("sernet.in","r",stdin);
- freopen("sernet.out","w",stdout);
- scanf("%d",&n);
- for(int i=1,x;i<=n;++i) scanf("%d",&x),id[x]=i;
- scanf("%d",&m);
- 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);
- scanf("%d",&k);
- for(int i=1,j,tm,st,ed;i<=k;++i)
- {
- scanf("%d%d%d%d",&j,&tm,&st,&ed);
- p[id[st]].push_back((package){j,tm,id[ed]});
- }
- scanf("%d",&t);
- for(int i=1;i<=n;++i)
- {
- BFS(i);
- for(int j=0;j<p[i].size();++j)
- if(res+p[i][j].stm>t&&!done[p[i][j].id]) ++ans,done[p[i][j].id]=1;
- }
- printf("%d",ans);
- return 0;
- }