比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
AAAAAAATTT |
题目名称 |
零食店 |
最终得分 |
70 |
用户昵称 |
ミント |
运行时间 |
3.714 s |
代码语言 |
C++ |
内存使用 |
0.32 MiB |
提交时间 |
2016-10-19 20:40:47 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 100 + 10;
const int INF = 0x7ffffff;
vector<int> G[maxn], C[maxn];
int val[maxn];
int n, m, q;
inline void solve(int s, int c, int d){
bool inque[maxn];memset(inque, false, sizeof(inque));
bool indis[maxn];memset(indis, false, sizeof(indis));
//int ans[maxn], dis[maxn];int kount = 0;
//int cnode[maxn];
//for(int i=1;i<=n;i++)cnode[i] = val[i];
//cnode[s] = 0;
int dist[maxn], kount = 0;
for(int i=1;i<=n;i++)dist[i] = INF;
dist[s] = 0;
queue<int> Q;Q.push(s);inque[s] = true;
while(!Q.empty()){
int now = Q.front();Q.pop();
inque[now] = false;
for(int i=0;i<G[now].size();i++){
int v = G[now][i], w = C[now][i];
if(dist[v]>dist[now]+w){
dist[v] = dist[now] + w;
if(dist[v]<=d&&indis[v]==false){
indis[v] = true;kount++;
//cout<<v<<' ';
}
if(val[v]>c)continue ;
if(!inque[v]){
inque[v] = true;
Q.push(v);
}
}
}
}
//int kount = 0;
//for(int i=1;i<=n;i++)
//if(dist[i]<=d)
//kount++;
cout<<kount<<endl;
//for(int i=1;i<=n;i++)cout<<dist[i]<<' ';cout<<endl;
return ;
}
int main(){
freopen("snackstore.in", "r", stdin);
freopen("snackstore.out", "w", stdout);
cin>>n>>m>>q;
for(int i=1;i<=n;i++)cin>>val[i];
for(int i=1;i<=m;i++){
int u, v, w;cin>>u>>v>>w;
G[u].push_back(v);C[u].push_back(w);
G[v].push_back(u);C[v].push_back(w);
}
while(q--){
int s, c, d;cin>>s>>c>>d;
solve(s, c, d);
}
return 0;
}