/*
cogs 2507 零食店
跪了这题的数据了....
第一遍Q*m 暴力询问 嗯 以为能的70 但只有40
Q已经到了1e6了
考试的时候 放弃了第三题又打了一遍
这次是Q*(n+logn) 最后发现和暴力分一样....
好吧数据很厉害 吓得我在地上爬23333
好吧 考完了之后 看了正解
我靠这不和我的一个样吗
哎 啊啊啊 二分....
傻傻的我笑了 都想出了方程 没打二分
.....
迅速的改成二分 由迅速的wa了 23333
其实这样过不了了 Dij预处理会超时.
看了正解 直接Floyed 巧妙利用了floyed k层循环的含义
状态差不多 最后终于70了 然后优化常树 然后抄了个inf 1e9
这个inf大一点小一点都不对....
知道最后也是卡过去的
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 110
#define inf 1e9+1
using namespace std;
int n,m,Q,r[maxn],f[maxn][maxn][maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
struct node{
int c,o;
}p[maxn];
int cmp(const node &x,const node &y){
return x.c<y.c;
}
void Floyed(){
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
f[k][i][j]=min(f[k-][i][j],f[k-][i][p[k].o]+f[k-][p[k].o][j]);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
sort(f[i][j]+,f[i][j]++n);
}
int main()
{
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
scanf("%d%d%d",&n,&m,&Q);
int u,v,pos,t;
for(int i=;i<=n;i++){
p[i].c=init();p[i].o=i;
r[i]=p[i].c;
}
sort(p+,p++n,cmp);sort(r+,r++n);
for(int k=;k<=n+;k++)
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)
f[k][i][j]=inf;
for(int i=;i<=m;i++){
u=init();v=init();t=init();
if(t<f[][u][v])
f[][u][v]=f[][v][u]=t;
}
for(int i=;i<=n;i++)f[][i][i]=;
Floyed();
while(Q--){
u=init();v=init();t=init();
v=upper_bound(r+,r++n,v)-r-;
pos=upper_bound(f[v][u]+,f[v][u]++n,t)-f[v][u]-;
printf("%d\n",pos-);
}
return ;
}
/*Dij预处理+二分找*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<vector>
#define pa pair<int,int>
#define mk make_pair
#define maxn 110
#define maxm 10010
#define inf 1e9+1
using namespace std;
int n,m,Q,num,head[maxn],c[maxn],r[maxn],sum;
int dis[maxn],f[maxn][maxn][maxn];
bool vis[maxn];
struct node{
int v,t,pre;
}e[maxm*];
priority_queue<pa,vector<pa>,greater<pa> >q;
int init(){
int x=;char s=getchar();
while(s<''||s>'')s=getchar();
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x;
}
void Add(int from,int to,int dis){
num++;e[num].v=to;
e[num].t=dis;
e[num].pre=head[from];
head[from]=num;
}
void Dij(int s,int mx){
while(!q.empty())q.pop();
for(int i=;i<=n;i++)dis[i]=inf;
memset(vis,,sizeof(vis));
q.push(mk(,s));dis[s]=;
while(!q.empty()){
int k=q.top().second;q.pop();
if(vis[k]||(c[k]>mx&&k!=s))continue;vis[k]=;
for(int i=head[k];i;i=e[i].pre){
int v=e[i].v;
if(dis[v]>dis[k]+e[i].t){
dis[v]=dis[k]+e[i].t;
q.push(mk(dis[v],v));
}
}
}
for(int i=;i<=n;i++)
f[s][mx][i]=dis[i];
sort(f[s][mx]+,f[s][mx]++n);
}
void Solve(){
for(int i=;i<=n;i++)
for(int j=;j<=sum;j++)
Dij(i,j);
}
int main()
{
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
n=init();m=init();Q=init();
int u,v,t;
for(int i=;i<=n;i++){
c[i]=init();r[++sum]=c[i];
}
sort(r+,r++sum);
sum=unique(r+,r++sum)-r-;
for(int i=;i<=n;i++){
int pos=lower_bound(r+,r++sum,c[i])-r;
c[i]=pos;
}
for(int i=;i<=m;i++){
u=init();v=init();t=init();
Add(u,v,t);Add(v,u,t);
}
for(int k=;k<=n+;k++)
for(int i=;i<=n+;i++)
for(int j=;j<=n+;j++)
f[k][i][j]=inf;
Solve();
while(Q--){
int pos=;
u=init();v=init();t=init();
v=upper_bound(r+,r++sum,v)-r-;
pos=upper_bound(f[u][v]+,f[u][v]++n,t)-f[u][v]-;
printf("%d\n",pos);
}
return ;
}
/*SPFA暴力找*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
#define maxm 10010
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
ll n,m,Q,num,hea[maxn],dis[maxn],q[maxm*],head,tail,c[maxn];
bool f[maxn];
struct node{
ll v,t,pre;
}e[maxm*];
ll init(){
ll x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Add(ll from,ll to,ll dis){
num++;e[num].v=to;
e[num].t=dis;
e[num].pre=hea[from];
hea[from]=num;
}
void SPFA(ll s,ll mx,ll mxx){
for(int i=;i<=n;i++)dis[i]=inf;
for(int i=;i<=n;i++)f[i]=;
head=;tail=;dis[s]=;
q[++tail]=s;f[s]=;
while(head<=tail){
ll k=q[head++];f[k]=;
if(c[k]>mx&&k!=s)continue;
for(int i=hea[k];i;i=e[i].pre){
ll v=e[i].v;
if(dis[v]>dis[k]+e[i].t){
dis[v]=dis[k]+e[i].t;
if(f[v]==&&dis[v]<=mxx){
f[v]=;q[++tail]=v;
}
}
}
}
}
int main()
{
freopen("snackstore.in","r",stdin);
//freopen("snackstore.out","w",stdout);
n=init();m=init();Q=init();
ll u,v,t;
for(int i=;i<=n;i++)
c[i]=init();
for(int i=;i<=m;i++){
u=init();v=init();t=init();
Add(u,v,t);Add(v,u,t);
}
while(Q--){
int cnt=;
u=init();v=init();
t=init();SPFA(u,v,t);
for(int i=;i<=n;i++)
if(dis[i]<=t&&i!=u)cnt++;
cout<<Q<<" "<<cnt<<endl;
}
return ;
}

cogs 2507 零食店的更多相关文章

  1. .Linode服务器的使用 网站迁移

    很多建站的朋友习惯了虚拟主机的 Cpanel 面板,但是面对 VPS 都感觉无所适从.毕竟外贸人很少接触到这类知识,所以需要一个贴心的新手教程. Linode VPS:国外最好的VPS注册购买教程 撇 ...

  2. 201621123006 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词. 继承.接口.抽象类.多态.interfac.comparable 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一 ...

  3. Java编程思想:构建复杂模型

    import sun.nio.cs.Surrogate; import java.util.ArrayList; import java.util.Random; public class Test ...

  4. 采用Sharding-JDBC解决分库分表

    源码:Sharding-JDBC(分库分表) 一.Sharding-JDBC介绍 1,介绍 Sharding-JDBC是当当网研发的开源分布式数据库中间件,从 3.0 开始Sharding-JDBC被 ...

  5. YTU 2507: 李白打酒

    2507: 李白打酒 时间限制: 1 Sec  内存限制: 128 MB 提交: 414  解决: 186 题目描述 话说大诗人李白,一生好饮.幸好他从不开车.  一天,他提着酒壶,从家里出来,酒壶中 ...

  6. C#开发微信门户及应用(24)-微信小店货架信息管理

    在前面微信小店系列篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及<C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试& ...

  7. C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试

    在上篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用.微信小店的相 ...

  8. C#开发微信门户及应用(22)-微信小店的开发和使用

    在做企业电子商务方面,微信小店虽然较淘宝天猫等起步较晚,但是作为一个电商平台,这个影响力不容忽视,结合微信的特点和便利,微信小店具有很好的粘合性和广泛的用户基础,因此花费一定的时间,在这方面做深入的研 ...

  9. 1奶茶店创业成本: 2发饰品加盟店创业成本 3眼镜行业店创业成本 从“程序员转行卖烧饼”想到IT人创业

    总结: -------奶茶店创业成本: 而这个奶茶店初期投资是:3万元加盟费+1万元保证金+8000装修+两万设备(冰柜.展示柜.收银机等等).别说赚钱,什么时候把初期投资赚回来呀! 一个店的利润就是 ...

随机推荐

  1. 数据结构练习 01-复杂度2. Maximum Subsequence Sum (25)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  2. php版的求表达式的真值表-TrueValueTable

    贴上代码: <?php error_reporting(E_ALL & ~E_NOTICE); $expression=$_GET['TrueTable']; //读取输入框数据 if( ...

  3. LightOj_1284 Lights inside 3D Grid

    题目链接 题意: 给一个X * Y * Z 的立方体, 每个单位立方体内都有一盏灯, 初始状态是灭的, 你每次操作如下: 1)选择一个点(x1, y1, z1)     再选择一个点(x2, y2, ...

  4. Cyclic Tour HDUOJ 费用流

    Cyclic Tour Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/65535 K (Java/Others)Total ...

  5. 在debug模式下运行不报错,换到release模式下报找不到某某库或文件的错。。解决办法

    我遇到的问题是:把edit secheme调到debug模式运行没有问题,然后调到release模式的时候报目录下没有libTuyoo.a 解决办法 把断开真机设备,用IOS device下relea ...

  6. Codeforces Round #154 (Div. 2) : B

    一个很简单的题: 方法一: 二分. 代码: #include<cstdio> #include<algorithm> #define maxn 100005 using nam ...

  7. Windows Azure 配置SSTP

    方法參考下面文章的步驟. 这个成功.http://freevpnba.com/windows-azure-sstp-vpn/ 这个没成功,不知道为什么.http://diaosbook.com/pos ...

  8. bzoj3790

    观察发现,这道题目其实就相当于一个最小区间覆盖问题这里的区间是指以每个点为中心的最长回文串很久没写manacher,有点感动不得不说manacher是一个非常好的算法 ..] of char; c,l ...

  9. 在QTP中使用DOM

    大家对DOM应该都不陌生,它在网页制作中有广泛的应用.如果我们想在QTP中使用DOM模型需要通过Page对象的Object属性来实现.注意,QTP11才有良好的DOM支持操作,这里用百度首页做例子. ...

  10. DB2_001_MQT

    MQT stands for Materialed Query Table.它的定义是建立在查询结果之上的,把动态查询的结果放到表中,表中的数据随着基础表中数据的变化而变化.当基础表中的数据变化时,M ...