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