比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
WWWWWWWTTT |
题目名称 |
零食店 |
最终得分 |
0 |
用户昵称 |
njx_07 |
运行时间 |
3.407 s |
代码语言 |
C++ |
内存使用 |
0.42 MiB |
提交时间 |
2016-10-19 21:30:40 |
显示代码纯文本
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <cmath>
#include <ctime>
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch>'9'||ch<'0') {if (ch=='-'){f=-1;} ch=getchar();}
while (ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
int n,m,q,st,c,d;
int point[200]={};
int dis[200]={};
int vis[200]={};
int use[200][200]={};
void init()
{
n=read();m=read();q=read();
for (int i=1;i<=n;i++)
point[i]=read();
memset(use,10,sizeof(use));
int xx,yy,vv;
for (int i=1;i<=m;i++) {xx=read();yy=read();vv=read();use[xx][yy]=vv;use[yy][xx]=vv;}
}
void work()
{
memset(dis,10,sizeof(dis));
memset(vis,false,sizeof(vis));
for (int i=1;i<=n;i++) dis[i]=use[st][i];
dis[st]=0;vis[st]=true;
for (int i=1;i<n;i++) {
int minn=99999999,k=0;
for (int j=1;j<=n;j++) if (!vis[j]&&dis[j]<minn){minn=dis[j];k=j;}
if (k==0) break;
vis[k]=true;
if (point[i]<=c)for (int j=1;j<=n;j++) if (dis[i]>dis[j]+minn) {dis[i]=dis[j]+minn;}
}
int ans=0;
for (int i=1;i<=n;i++)
if (dis[i]<=d&&i!=st) ans++;
printf("%d\n",ans);
}
int main()
{
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
init();
for (int i=1;i<=q;i++) {st=read();c=read();d=read();work();}
return 0;
}