比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
AAAAAAAWWW |
题目名称 |
零食店 |
最终得分 |
70 |
用户昵称 |
再见 |
运行时间 |
2.171 s |
代码语言 |
C++ |
内存使用 |
4.33 MiB |
提交时间 |
2016-10-19 21:40:27 |
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cctype>
using namespace std;
const int INF=0x7f7f7f7f;
inline int read(){
int _x=0; char ch; bool flag=false;
while(ch=getchar(),!isdigit(ch)) ch=='-'?flag=true:false;
while(_x=_x*10+ch-'0',ch=getchar(),isdigit(ch));
return flag?-_x:_x;
}
char out[100];int len;
inline void print(int x){
if(x==0) putchar('0');
len=0;
while(x!=0){
out[len++]=x%10+'0';
x/=10;
}
while(len){
len--;
putchar(out[len]);
}
putchar('\n');
}
struct node{ int val,pos; }a[110];
int n,m,q,ans[110][110][110],g[110][110],hash[110];
bool cmp(const node &a,const node &b){return a.val<b.val;}
inline int min(int a,int b){return a<b?a:b;}
inline int find(int c){
int l=1,r=n,mid,re=0;
while(l<=r){
mid=(l+r)>>1;
if(a[mid].val<=c) re=mid,l=mid+1;
else r=mid-1;
}
return re;
}
int main()
{
//freopen("a.txt","r",stdin);
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
n=read(); m=read(); q=read();
for(int i=1;i<=n;i++) a[i].val=read(),a[i].pos=i;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++) hash[a[i].pos]=i;
memset(g,0x7f,sizeof(g));
for(int i=1;i<=m;i++){
int u=read(),v=read(),w=read();
u=hash[u]; v=hash[v];
g[u][v]=min(g[u][v],w);
g[v][u]=min(g[v][u],w);
}
for(int i=1;i<=n;i++) g[i][i]=0;
memcpy(ans[0],g,sizeof(g));
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(g[i][k]!=INF&&g[k][j]!=INF)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
memcpy(ans[k],g,sizeof(g));
}
a[n+1].val=INF;
for(int i=1;i<=q;i++){
int s=read(),c=read(),d=read(),pos=0,sum=0;
s=hash[s];
pos=find(c);
for(int j=1;j<=n;j++)
if(s!=j&&ans[pos][s][j]<=d)
sum++;
print(sum);
}
return 0;
}