snackstore.in snackstore.out
时间限制:1 s 内存限制:256 MB

题目描述

成功找到了学长之后学姐感觉到有些饿,于是决定去附近的零食店给自己和学长买些零食。
焦作市的有n家零食店,由m条道路连接着这些零食店,每条道路都有自己的长度l,每家零食店都有自己的消费指数。
由于学姐是个穷B,所以去买零食的路上不能经过某些消费指数超过一定限度的店。
同时由于学姐体力有限,所以去买零食的过程中走的路程不能太长。
想来想去学姐决定去问学长买什么零食比较好,反正到最后都是学长吃╮(╯_╰)╭
在去问之前,学姐准备先做好准备,她把焦作市(所有零食店)的地图给了你,希望你能编出一个程序快速回答她从某个零食店出发,在上述限制下有多少家零食店可供她挑选。
【输入格式】
第一行三个正整数n,m,q,分别代表零食店数,道路数和询问数。
接下来一行n个正整数,第i个正整数vi代表第i家零食店的消费指数。
接下来m行,第i行三个正整数x,y,l,代表第i条道路连接编号为x和y的两个零食店,长度为l。
接下来q行第i行三个正整数s,c,d,代表第i个询问要求从s出发,所经过的零食店的消费指数不能超过c(除了起点和终点以外),且行走路程不超过d。
【输出格式】
一共q行,第i行一个整数代表在第i个询问的要求下有多少家零食店可供学姐挑选。
【样例输入】
5 5 2
1 2 3 4 5
1 2 1
1 3 4
2 3 2
1 4 3
2 5 1
1 1 3
2 1 2
【样例输出】
2
3
【提示】
样例中第一个询问能去编号为2/4的零食店。
第二个询问能去编号为1/3/5的零食店。
对于40%的数据,n≤10,m≤20,q=1。
对于70%的数据,m≤500,q≤10000。
对于100%的数据,n≤100,m≤10000,q≤1000000,vi,c,d≤10^9,1≤x,y,s≤n,l≤10^6。

题解

70pts的做法就是对于每一个询问,暴力地跑最短路,每一次只用val<=c的点。时间复杂度O(kmq)O(kmq)
满分做法其实和这个很像。离散化val了之后,预处理dis(k,i,j)表示只走val前k小的点的时候i到j的最短路。然后查询的时候两次二分,第一次找到询问的c是当前第几小的点,第二次二分是对dis(k,s,i)排序之后二分出最短路<=d的最多是哪一个点。时间复杂度O(qlogn)O(qlogn)
实际上O(qn)O(qn)也是可以卡时过的。

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
#define N 105int n,m,q,x,y,l,s,c,d,inf,ans;
int dis[N][N][N];
struct hp{int val,id;}a[N];int cmp(hp a,hp b)
{return a.val<b.val;
}
void floyed()
{for (int k=0;k<=n;++k)for (int i=1;i<=n;++i) dis[0][i][i]=0;for (int k=1;k<=n;++k)for (int i=1;i<=n;++i)for (int j=1;j<=n;++j){dis[k][i][j]=min(dis[k][i][j],dis[k-1][i][j]);if (dis[k-1][i][a[k].id]<inf&&dis[k-1][a[k].id][j]<inf)dis[k][i][j]=min(dis[k][i][j],dis[k-1][i][a[k].id]+dis[k-1][a[k].id][j]);}
}
int find(int c)
{int l=1,r=n,mid,ans=0;while (l<=r){mid=(l+r)>>1;if (a[mid].val<=c) ans=mid,l=mid+1;else r=mid-1;}return ans;
}
int main()
{freopen("snackstore.in","r",stdin);freopen("snackstore.out","w",stdout);scanf("%d%d%d",&n,&m,&q);for (int i=1;i<=n;++i) scanf("%d",&a[i].val),a[i].id=i;sort(a+1,a+n+1,cmp);memset(dis,127,sizeof(dis));inf=dis[0][0][0];for (int i=1;i<=m;++i){scanf("%d%d%d",&x,&y,&l);dis[0][x][y]=dis[0][y][x]=min(dis[0][x][y],l);}floyed();for (int t=1;t<=q;++t){scanf("%d%d%d",&s,&c,&d);ans=0;int k=find(c);for (int i=1;i<=n;++i)if (dis[k][s][i]<=d) ans++;}
}

总结

①floyed的这种类似于dp的方法还是要好好想想。

[noip测试]零食店(floyed+二分)相关推荐

  1. 大学生可以选择加盟零食店么

    大学生可以选择加盟零食店么?现在大学年年都在扩招,但社会上相应的工作岗位却无法跟随扩招的速度,这就造成了大学生无法正常就业的难题.既然无法就业就要想办法自己创业,休闲食品行业就是如今比较适合大学自主创 ...

  2. 投资开零食店谨防零食多这个骗子

    零食行业的繁荣发展,让其成为了投资市场上一个比较人们的行业,投资市场十分的火爆,目前,市场上出现了许多虚假的零食店加盟品牌,以虚假的信息,欺骗创业者,给创业者带来了很大的损失,零食多就是其中一个比较大 ...

  3. 零食店收银管理系统哪个好

    比如经营零食店的你,或多或少会出现以下这些情况: 散称混售.商品凑整.散称预包装对收银要求比较高; 自营店.加盟店较多的连锁门店,店铺分散面积广,采购配货必须经过统一的管理;门店会员基数大,但是无法维 ...

  4. 聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)

    聪明的质监员 2011年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 小 T 是一名质量监督员, ...

  5. NOIP 2001 一元三次方程求解(二分||盛金公式)

    题目描述 有形如:ax3+bx2+cx+d=0这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝 ...

  6. 零食店用社群,2天吸引349人主动上门,收款63000元?

    互联网发达的今天,人人都可以构建自己的社群,也应该学会建立自己的社群. 社群运营背后的目的基本都是"变现",从而获得实际的回报. 1场好的社群营销活动,背后都有1套完善的流程,既可 ...

  7. 计算机毕业设计 SpringBoot+Vue食商城系统 零食购物平台系统 网红零食店铺线上交易平台系统Java Vue MySQL数据库 远程调试 代码讲解

  8. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  9. 南京三只松鼠java_又出新模式?三只松鼠南京首家品牌集合店开业

    距离2020年结束还有不到一周的时间!12月26日,南京首家三只松鼠品牌集合店落地虹悦城商场,赶在了小店2020年最后一批新开店,相较于以往有点"特别"的是,三只松鼠集团CEO章燎 ...

最新文章

  1. 小弟的新书《Ext JS权威指南》终于出版了
  2. android如何使用xml资源文件,Android-使用xml文件资源定义菜单
  3. AgileConfig轻量级配置中心1.4.0发布,重构了发布功能
  4. java 等待线程结束 框架_深入理解Java多线程与并发框架——线程的状态
  5. impala 本年格式化时间_【DataPM】Impala里的日期函数
  6. mysql怎么添加默认约束_分享知识-快乐自己:MySQL中的约束,添加约束,删除约束,以及一些其他修饰...
  7. Android Studio 使用艺术 - Android Windows 开发环境配置
  8. 6.1 API : AdaBoostClassifier与AdaBoostRegressor
  9. 使用DSIM给WIN7集成SP2、IE11、USB3
  10. linux驱动之设备号与创建设备节点
  11. Centos7之卸载oracle11G
  12. Echarts饼状legend如何自动显示值和百分比
  13. 心灵奇旅最触动我的一段
  14. 数字乡村建设浅谈(一):可行性、难点、思考
  15. c51单片机烧录程序 控制台显示正在检测目标单片机
  16. js 页面跳转方法 当前页与新增页面
  17. 解决Ardupilot+gazebo+mavros在仿真状态下无人机能解锁,但是不能起飞的问题
  18. 区块链和大数据一起能否开启数据完整性的新纪元?
  19. 13.Python常用第三方库—tabulate库的使用
  20. m3u8下载,简化版,无解密

热门文章

  1. gradle-7.0.2-all 百度网盘下载
  2. (已更新)闪照功能娱乐微信小程序源码下载
  3. PADS VX1.2 设计备忘录1——Layout常用快捷键及操作
  4. 美颜SDK人像抠图技术是什么?人像抠图技术是如何实现的?
  5. C语言入门小游戏——猜数字游戏(详解)
  6. 12个常用的数据思维图
  7. 011 - JDK自带的性能监控工具
  8. python定义函数时有多个return语句
  9. 数据库MySQL入门-上
  10. 计算机专业未来美句,计算机专业爱情语录