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