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