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