比赛 EYOI与SBOI开学欢乐赛5th 评测结果 AAEAW
题目名称 SERNET模拟 最终得分 60
用户昵称 Skloud 运行时间 0.940 s
代码语言 C++ 内存使用 1.35 MiB
提交时间 2022-09-16 21:10:04
显示代码纯文本
#include<cstdio>
#include<queue>
using namespace std;
struct node{
    int x,t;
    node(){}
    node(int a,int b){x=a,t=b;}
};
int n,m,k,t;
int x,y,z,u;
int ne[210],v[210],head[35],w[210],tot;
node time[30005];int ttot;
bool fu[101],vis[105];
inline void add(int x,int y,int z)
{
    w[++tot]=z;
    v[tot]=y;
    ne[tot]=head[x];
    head[x]=tot;
}
void bfs()
{
    queue <node> q;
    q.push(node(z,y));
    while(!q.empty())
    {
        int t=q.front().x,l=q.front().t;q.pop();
        if(vis[t]) continue;
        vis[t]=1;
        for(int p=head[t];p;p=ne[p])
        {
            if(vis[p]||u==v[p]||z==v[p]) continue;
            //printf("%d ",v[p]);
            time[++ttot]=node(l,l+w[p]-1);
            q.push(node(v[p],l+w[p]));
        }
    }
}
int main()
{
    freopen("sernet.in","r",stdin);
    freopen("sernet.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){scanf("%d",&x);fu[x]=1;}
    scanf("%d",&m);
    for(int i=1;i<=m;i++){scanf("%d%d%d",&x,&y,&z);add(x,y,z);add(y,x,z);}
    scanf("%d",&k);
    for(int i=1;i<=k;i++)
    {
        scanf("%d%d%d%d",&x,&y,&z,&u);
        if(fu[z]) bfs();
        for(int j=1;j<=100;j++) vis[j]=0;
    }
    scanf("%d",&t);
    int ans=0;
    for(int i=1;i<=ttot;i++) if(t>=time[i].x&&t<=time[i].t) ans++;
    printf("%d",ans);
}