cogs 2507 零食店
/*
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 零食店的更多相关文章
- .Linode服务器的使用 网站迁移
很多建站的朋友习惯了虚拟主机的 Cpanel 面板,但是面对 VPS 都感觉无所适从.毕竟外贸人很少接触到这类知识,所以需要一个贴心的新手教程. Linode VPS:国外最好的VPS注册购买教程 撇 ...
- 201621123006 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词. 继承.接口.抽象类.多态.interfac.comparable 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一 ...
- Java编程思想:构建复杂模型
import sun.nio.cs.Surrogate; import java.util.ArrayList; import java.util.Random; public class Test ...
- 采用Sharding-JDBC解决分库分表
源码:Sharding-JDBC(分库分表) 一.Sharding-JDBC介绍 1,介绍 Sharding-JDBC是当当网研发的开源分布式数据库中间件,从 3.0 开始Sharding-JDBC被 ...
- YTU 2507: 李白打酒
2507: 李白打酒 时间限制: 1 Sec 内存限制: 128 MB 提交: 414 解决: 186 题目描述 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中 ...
- C#开发微信门户及应用(24)-微信小店货架信息管理
在前面微信小店系列篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及<C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试& ...
- C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试
在上篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用.微信小店的相 ...
- C#开发微信门户及应用(22)-微信小店的开发和使用
在做企业电子商务方面,微信小店虽然较淘宝天猫等起步较晚,但是作为一个电商平台,这个影响力不容忽视,结合微信的特点和便利,微信小店具有很好的粘合性和广泛的用户基础,因此花费一定的时间,在这方面做深入的研 ...
- 1奶茶店创业成本: 2发饰品加盟店创业成本 3眼镜行业店创业成本 从“程序员转行卖烧饼”想到IT人创业
总结: -------奶茶店创业成本: 而这个奶茶店初期投资是:3万元加盟费+1万元保证金+8000装修+两万设备(冰柜.展示柜.收银机等等).别说赚钱,什么时候把初期投资赚回来呀! 一个店的利润就是 ...
随机推荐
- matlab函数之diag
diag(A) 这个看似简单的函数确认让我头疼了几个小时 该函数其实有两个作用 ① 如果A是一个矩阵,那么diag(A)的作用便是提取A的对角线元素 ② 如果A是一个向量,那么diag(A)的作用便是 ...
- EasyPHP的Apache报错
今天安装了最新版本的软件:EasyPHP-DevServer-14.1VC11-install.exe 启动报错: 打开Cport软件: 可见80端口被系统占用,导致Apache不能启动. (1)手动 ...
- 【关于JavaScript】自动计算的实例
在一些贸易业务Web系统中,某些页面需要提供实时的辅助计算功能,例如:员工录入货物的单价和数量的值,通过JavaScript的事件处理可以直接显示出总价. 如下图所示就是本例的运行效果图: 本例中也采 ...
- ALTER TABLE 语句与 FOREIGN KEY 约束"FK_SCHEDULE_REFERENCE_POSTCONF"冲突。
主要原因是因为两个表中有数据不匹配,只要把不匹配的数据删掉就行了.
- CTSC模拟题 树上的路径
Description 给定一棵\(N\)个结点的树,结点用正整数\(1 \dots N\)编号,每条边有一个正整数权值.用\(d(a, b)\)表示从结点\(a\)到结点\(b\)路径上经过边的权值 ...
- 百部BBC经典纪录片,附地址,需要的请抱走
- C#处理四舍五入的问题
在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六入五成双”的方法,如下面的例子,就是用“四舍六入五成双”得到的结果: double d1 = Math.Round(1.25, ...
- C#针对DataTable进行分页方法
以下的分页方法是针对数据量不是非常大的数据进行的,是在内存中进行的分页操作. /// <summary> /// DataTable分页 /// </summary> /// ...
- ACM2054_A=B
/* 问题说明 给你两个号码A和B,如果A等于B,您应打印“YES”,或打印“NO”. 输入 每个测试案例包含A和B两个数字 产量 每一种情况下,如果A等于B,您应打印“YES”,或打印“NO”. 采 ...
- 《University Calculus》-chaper13-多重积分-二重积分的计算
之前关于二重积分的笔记,介绍了二重积分概念的引入,但是对于它的计算方法(化为累次积分),介绍的较为模糊,它在<概率论基础教程>中一系列的推导中发挥着很重要的作用. 回想先前关于二重积分的几 ...