/*
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. JAVA抽象类和接口的深入探讨

    Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...

  2. iOS-NSTimer-pause-暂停-引用循环

    7月26日更新: 今天更新的主要目的是因为暂停!!!! 注:不推荐使用,并不是这样有错,而是因为这样写代码的规范问题,代码要有可读性,遵循代码即文档,使用暂停在团队合作中可能会带来误会,非必要不建议使 ...

  3. Junit4学习笔记--方法的执行顺序

    package com.lt.Demo.TestDemo; import java.util.Arrays; import java.util.Collection; import org.junit ...

  4. Delphi消息的广播方式(先RegisterWindowMessage,后SendMessage HWND_BROADCAST,最后改写接收窗口的WndProc)

    ///////消息广播只能将消息传递到接收消息的主程序中,MDIChild窗体不能接收到广播消息:///////// unit Unit1; interface uses Windows, Messa ...

  5. 编码问题(.java/.jsp/.js等文件的中文乱码)

    乱码的出现是因为编码与解码的不一致造成的,假如你对“中文”两个字进行了gbk格式的保存,却用utf-8格式的解读,是肯定会出现乱码的. 如何避免中文乱码:应用上下统一用一种编码格式. utf-8或者g ...

  6. QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素

    QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参 ...

  7. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  8. Linux Shell编程(28)——进程替换

    进程替换与命令替换很相似. 命令替换把一个命令的结果赋给一个变量,例如 dir_contents=`ls -al`或xref=$. 进程替换则是把一个进程的输出回馈给另一个进程 (换句话说,它把一个命 ...

  9. Research Papers

    NSE, $\bbu$ [Papers]NSE, $u$, Lorentz space [Sohr, JEE, 2001] [Papers]NSE, $u$, Lorentz space [Bjorl ...

  10. Matlab中常用操作

    (1)换行操作: 末尾加上“...”,然后加enter:有时候多条语句重起一行,这时shift+enter >> 4*sin(0.3)*...8 (2)一些快捷键: Ctrl+R 可多行同 ...