比赛 NOIP模拟赛by mzx Day1 评测结果 EEEEEEEEEE
题目名称 零食店 最终得分 0
用户昵称 森林 运行时间 1.309 s
代码语言 C++ 内存使用 0.55 MiB
提交时间 2016-10-19 21:40:55
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
const int maxn=110;
struct E{
	int to,next,w;
};E e[11000<<1];
int val[maxn],head[maxn],len=0;
int dist[maxn][maxn];
int n;
inline void add(const int& from,const int& to,const int& w){
	e[++len].to=to;
	e[len].w=w;
	e[len].next=head[from];
	head[from]=len;
}
#include<queue>
int dis[maxn];
struct node{
	int id,dist;
	node(int a=0,int b=0){id=a;dist=b;}
	bool operator<(const node& a)const{
		return dist>a.dist;
	}
}u;
priority_queue<node>q;
inline void djs(const int& x){
	dis[x]=0;
	q.push(node(x,0));
	while(!q.empty()){
		u=q.top();q.pop();
		for(int i=head[u.id];i!=-1;i=e[i].next){
			if(u.dist+e[i].w<dis[e[i].to]){
				dis[e[i].to]=u.dist+e[i].w;
				q.push(node(e[i].to,dis[e[i].to]));
			}
		}
	}
}
int main(){
	#define submit
	#ifdef submit
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	#endif
	int m,q,a,b,c;
	memset(head,-1,sizeof head);
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;++i){
		scanf("%d",&val[i]);
	}
	for(int i=1;i<=m;++i){
		scanf("%d%d%d",&a,&b,&c);
		add(a,b,c);
		add(b,a,c);
	}
	while(q--){
		scanf("%d%d%d",&a,&b,&c);
		djs(a);
		cout<<dis[b]<<endl;
	}
	#ifdef submit
	fclose(stdin);
	fclose(stdout);
	#else
	system("pause");
	#endif
	return 0;
}