比赛 2024国庆练习1 评测结果 AWWAWWWTTT
题目名称 零食店 最终得分 20
用户昵称 flyfree 运行时间 6.210 s
代码语言 C++ 内存使用 13.37 MiB
提交时间 2024-10-04 16:59:53
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 1000010
inline ll read(){
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
struct node{
	ll x,y,val,l;
}line[MAXN];
struct node_qs{
	ll s,c,d,id,ans;
}qs[MAXN];
ll n,m,q,cnt;
ll val[110],len[110][110],used[110];
bool cmp_node_val(node a,node b){
	return a.val<b.val;
}
bool cmp_qs_val(node_qs a,node_qs b){
	return a.c<b.c;
}
bool cmp_qs_id(node_qs a,node_qs b){
	return a.id<b.id;
}
void ad_(ll id){
	ll x=line[id].x,y=line[id].y;
	len[x][y]=min(len[x][y],line[id].l);
	len[y][x]=min(len[y][x],line[id].l);
	for(int i=1;i<=n;i++){
		if(i==x||i==y)continue;
		len[i][x]=min(len[i][x],len[i][y]+len[x][y]);
		len[x][i]=min(len[x][i],len[i][y]+len[x][y]);
		len[y][i]=min(len[y][i],len[i][x]+len[x][y]);
		len[i][y]=min(len[i][y],len[i][x]+len[x][y]);
	}
}
void ycl(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			len[i][j]=1e10;
		}
		len[i][i]=0;
	}
}
int main(){
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	n=read(),m=read(),q=read();
	for(int i=1;i<=n;i++)val[i]=read();
	for(int i=1;i<=m;i++){
		line[i].x=read(),line[i].y=read(),line[i].l=read();
		line[i].val=max(val[line[i].x],val[line[i].y]);
	}
	for(int i=1;i<=q;i++){
		qs[i].s=read(),qs[i].c=read(),qs[i].d=read();
		qs[i].id=i;
	}
	sort(line+1,line+1+m,cmp_node_val);
	sort(qs+1,qs+1+q,cmp_qs_val);
	cnt=1;
	for(int i=1;i<=q;i++){
		while(cnt<=m&&line[cnt].val<=qs[i].c){
			ad_(cnt);
			cnt++;
		}
		used[qs[i].s]=i;
		for(int j=1;j<=m;j++){
			ll x=line[j].x,y=line[j].y;
			if(len[x][qs[i].s]+line[j].l<=qs[i].d&&used[y]<i&&(val[x]<=qs[i].c||x==qs[i].s)){
				used[y]=i;
				qs[i].ans++;
//				cout<<qs[i].id<<" "<<y<<endl;
			}
			if(len[y][qs[i].s]+line[j].l<=qs[i].d&&used[x]<i&&(val[y]<=qs[i].c||y==qs[i].s)){
				used[x]=i;
				qs[i].ans++;
//				cout<<qs[i].id<<" "<<x<<endl;
			}
		}
	}
	sort(qs+1,qs+1+q,cmp_qs_id);
	for(int i=1;i<=q;i++)cout<<qs[i].ans<<endl;
	return 0;
}