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