比赛 NOIP模拟赛by mzx Day1 评测结果 AAAAWWWTTT
题目名称 零食店 最终得分 40
用户昵称 liu_runda 运行时间 3.048 s
代码语言 C++ 内存使用 17.47 MiB
提交时间 2016-10-19 21:10:53
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cctype>
#include<cstring>
#include<ctime>
using namespace std;
char ch;
template<typename T>inline void read(T &x){
    while(ch=getchar(),!isdigit(ch));
    x=ch-'0';
    while(ch=getchar(),isdigit(ch))x=x*10+ch-'0';
}
const int maxn=105,maxq=1000005;
int dis[maxn][maxn];
int v[maxn];
inline int min(int a,int b){
    return a<b?a:b;
}
int seq1[maxn],seq2[maxq],s[maxq],limv[maxq],limd[maxq],ans[maxq];
bool cmp1(const int &a,const int &b){
    return v[a]<v[b];
}
bool cmp2(const int &a,const int &b){
    return limv[a]<limv[b];
}
int stack[100],len;
inline void qwrite(int x){
    len=0;
    while(x){
        stack[++len]=x%10;
        x/=10;
    }
    for(int i=len;i>=1;--i)putchar('0'+stack[i]);
    putchar('\n');
}
int main(){
    freopen("snackstore.in","r",stdin);
    freopen("snackstore.out","w",stdout);
    int n,m,q;read(n);read(m);read(q);
    for(int i=1;i<=n;++i)read(v[i]);
    int a,b,w;
    memset(dis,0x3f,sizeof(dis));
    for(int i=1;i<=n;++i){
        dis[i][i]=0;
        seq1[i]=i;
    }
    sort(seq1+1,seq1+n+1,cmp1);
    for(int i=1;i<=m;++i){
        read(a);read(b);read(w);
        dis[a][b]=dis[b][a]=min(dis[b][a],w);
    }
    for(int i=1;i<=q;++i){
        read(s[i]);read(limv[i]);read(limd[i]);
        seq2[i]=i;
    }
    sort(seq2+1,seq2+q+1,cmp2);
    int l=1;
    int tmp,qnum;
    for(int i=1;i<=q;++i){
        qnum=seq2[i];
        while(l<=n&&v[seq1[l]]<=limv[qnum]){
            tmp=seq1[l];
            for(int j=1;j<=n;++j){
                for(int k=1;k<=n;++k){
                    dis[j][k]=min(dis[j][k],dis[j][tmp]+dis[tmp][k]);
                }
            }
            ++l;
        }
        for(int j=1;j<=n;++j){
            if(j!=s[qnum]&&dis[s[qnum]][j]<=limd[qnum]){
                ans[qnum]++;
            }
        }
    }
    for(int i=1;i<=q;++i)qwrite(ans[i]);
    fclose(stdin);fclose(stdout);
    return 0;
}