比赛 |
EYOI与SBOI开学欢乐赛5th |
评测结果 |
AWWAW |
题目名称 |
SERNET模拟 |
最终得分 |
40 |
用户昵称 |
该账号已注销 |
运行时间 |
0.110 s |
代码语言 |
C++ |
内存使用 |
48.15 MiB |
提交时间 |
2022-09-16 21:23:13 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct eg{
int t,n,w;
}e[410];
int n,m,k,hd[410]={0},cnt=0,T,ans=0;
int tim[110][100100]={0};
int id[1010],stm[1010],fr[1010],to[1010];
int fwq[110];
int lstm[100100]={0};
void add(int x,int y,int z){
e[++cnt].t=y;
e[cnt].n=hd[x];
hd[x]=cnt;
e[cnt].w=z;
}
void spfa(int id,int stm,int fr,int t){
queue<int>q;
int dis[110];
q.push(fr);
memset(dis,0x3f,sizeof(dis));
dis[fr]=stm;
bool v[110]={0};
v[fr]=1;
while(!q.empty()){
int x=q.front();
q.pop();
v[x]=0;
for(int i=hd[x];i;i=e[i].n){
int ver=e[i].t;
int w=e[i].w;
if(dis[ver]>dis[x]+w){
dis[ver]=dis[x]+w;
if(v[ver]==0&&ver!=t){
v[ver]=1;
q.push(ver);
}
}
}
}
for(int i=1;i<=n;i++){
tim[fwq[i]][id]=min(tim[fwq[i]][id],dis[fwq[i]]);
}
}
void spfa2(int fr,int t,int id,int stm){
queue<int>q;
q.push(fr);
int dis[110]={0};
dis[fr]=stm;
bool v[110]={0};
v[fr]=1;
while(!q.empty()){
int x=q.front();
q.pop();v[x]=0;
for(int i=hd[x];i;i=e[i].n){
int ver=e[i].t;
int w=e[i].w;
if(dis[ver]<dis[x]+w){
dis[ver]=dis[x]+w;
if(v[ver]==0&&ver!=t&&dis[ver]<=tim[ver][id]){
q.push(ver);
v[ver]=1;
}
}
}
}
for(int i=1;i<=n;i++){
int id2=fwq[i];
lstm[id]=max(lstm[id],dis[id2]);
}
}
int main(){
freopen("sernet.in","r",stdin);
freopen("sernet.out","w",stdout);
cin>>n;
memset(tim,0x3f,sizeof(tim));
for(int i=1;i<=n;i++){
int x;
cin>>x;
fwq[i]=x;
}
cin>>m;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
cin>>k;
for(int i=1;i<=k;i++){
cin>>id[i]>>stm[i]>>fr[i]>>to[i];
spfa(id[i],stm[i],fr[i],to[i]);
}
for(int i=1;i<=k;i++){
spfa2(fr[i],to[i],id[i],stm[i]);
}
cin>>T;
for(int i=1;i<=k;i++){
if(lstm[id[i]]>T)ans++;
}
cout<<ans<<endl;
return 0;
}