比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
WAAWWWWTTT |
题目名称 |
零食店 |
最终得分 |
20 |
用户昵称 |
Ostmbh |
运行时间 |
3.044 s |
代码语言 |
C++ |
内存使用 |
0.36 MiB |
提交时间 |
2016-10-19 21:37:13 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int w[110][110];
vector<int>A[110];
int vis[110];
int dis[110];
int ins[110];
int cl[110];
queue<int>q;
inline void read(int &x){
x=0;
char c=getchar();
bool flag=0;
while(c<'0'||c>'9'){
if(c=='-')
flag=1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
if(flag)
x=-x;
}
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(cl[i]);
memset(w,127/2,sizeof(w));
int x,y,z;
for(int i=1;i<=m;i++){
read(x),read(y),read(z);
w[x][y]=w[y][x]=min(w[x][y],z);
}
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
if(w[i][j]!=w[0][0])
A[i].push_back(j),A[j].push_back(i);
for(int i=1;i<=Q;i++){
read(x),read(y),read(z);
for(int j=1;j<=n;j++)
vis[j]=ins[j]=0,dis[j]=0x7fffffff/2;
dis[x]=0;
vis[x]=1;
q.push(x);
while(!q.empty()){
int cd=q.front();
ins[cd]=1;
q.pop();
for(int j=0;j<A[cd].size();j++){
int u=A[cd][j];
if(dis[u]>dis[cd]+w[cd][u]&&dis[cd]+w[cd][u]<=z){
if(cl[u]>y){
ins[u]=1;
continue;
}
else if(!vis[u]&&cl[u]<=y){
vis[u]=1;
q.push(u);
}
}
}
vis[cd]=0;
}
int ans=0;
for(int j=1;j<=n;j++)
if(ins[j]&&j!=x)
ans++;
printf("%d\n",ans);
}
return 0;
}