错解警告!!!

描述

可怜的RunningPhoton又做噩梦了。。但是这次跟上次不大一样,虽然他又被困在迷宫里,又被装上了一个定时炸弹,但是值得高兴的是,他发现他身边有数不清的财宝,所以他如果能带着这些财宝并活着逃出去的话,他就发财啦。不过,这次的迷宫不再是一个矩形方格了,而是由点和边组成的图,每条边都有通过该边的时间,以及由于神奇阵法而产生的对财宝数量的限制(即通过这条边只能带上不超过一定数量的财宝,否则炸弹将笋干爆炸!)。现在,RuningPhoton又开始疑惑了,在保证能活着逃出去的情况下,他最多能拿多少价值的财宝?

 

输入

第一行一个整数T(1≤T≤10),代表样例数。 
每个样例的第一行有3个整数n(1≤n≤10,000),m(1≤m≤50,000),K(1≤K≤500,000),分别代表迷宫的点数,边数以及炸弹离爆炸的剩余时间。刚开始RuningPhoton在1,出口在n。 
接下来m行,每行4个整数u,v(1≤u,v≤n),cap(1≤cap≤2∗109),dis(1≤dis≤50,000)分别代表每条边的两端点,该边的财宝数量限制以及通过这条边的时间。 
(P.S. 这次在计时到0的时候到达n点也算逃出迷宫)

 

输出

每组数据输出一行,代表在保证或者逃出去的情况下能得到的最多财宝价值,被炸死输出"Poor RunningPhoton!"(不含引号)。

 

样例输入


2 1 10 
1 2 13 10 
4 4 20 
1 2 1000 15 
2 4 999 6 
1 3 100 15 
3 4 99 4

 

样例输出

13 
99

思路:

正向Dijkstra,反向bfs,反向bfs的过程中,将起始点的dis设为k,cap设为inf,然后,如果与之相连的顶点的最短路的值,小于当前顶点的dis值减去边权,那么就将其放入队列,并将dis值设为顶点的dis值减去边权,cap值为当前节点的cap值与边的cap值的最小值。

错误原因:

推测:BFS的队列占用内存太大

MLE代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
int n,m,k;
const int maxn = 10005;
const int inf = 2100000000;
vector<int>u[maxn];
vector<int>w[maxn];
vector<int>c[maxn];
int dis[10005];
struct node
{
int x,dis,cap;
bool operator<(const node t)const
{
return t.dis<dis;
}
}; void init()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<maxn;i++){
u[i].clear();
w[i].clear();
c[i].clear();
}
int x,y,z,r;
for(int i=1;i<=m;i++){
scanf("%d%d%d%d",&x,&y,&z,&r);
u[x].push_back(y);
w[x].push_back(r);
c[x].push_back(z);
u[y].push_back(x);
w[y].push_back(r);
c[y].push_back(z);
}
} void Dijkstra()
{
for(int i=1;i<=n;i++){
dis[i]=inf;
}
priority_queue<node>q;
dis[1]=0;
q.push(node{1,0,0});
node exa;
while(!q.empty()){
exa=q.top();
q.pop();
int t=exa.x;
int siz=u[t].size();
for(int i=0;i<siz;i++){
if(dis[u[t][i]]>w[t][i]+dis[t]){
dis[u[t][i]]=w[t][i]+dis[t];
q.push(node{u[t][i],dis[u[t][i]],0});
}
}
}
} int BFS()
{
queue<node>q;
q.push(node{n,k,inf});
node exa;
int ans=-1;
while(!q.empty()){
exa=q.front();q.pop();
int t=exa.x;
if(t==1){ans=max(ans,exa.cap);continue;}
int siz=u[t].size();
for(int i=0;i<siz;i++){
if(exa.dis-w[t][i]>=dis[u[t][i]]){
q.push(node{u[t][i],exa.dis-w[t][i],min(c[t][i],exa.cap)});
}
}
}
return ans;
} int solve()
{
Dijkstra();
return BFS();
} int main()
{
// freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--){
init();
int t=solve();
if(t==-1){printf("Poor RunningPhoton!\n");}
else printf("%d\n",t);
}
}

提示

删掉输出,可以将结果化为WA哦!

SCU-4527 NightMare2(Dijkstra+BFS) !!!错误题解!!!的更多相关文章

  1. SCU 4527 NightMare2 最短路+二分 好题

    可怜的又做噩梦了..但是这次跟上次不大一样,虽然他又被困在迷宫里,又被装上了一个定时炸弹,但是值得高兴的是,他发现他身边有数不清的财宝,所以他如果能带着这些财宝并活着逃出去的话,他就发财啦.不过,这次 ...

  2. CTSC1999补丁VS错误题解

    题目描写叙述 Description 错误就是人们所说的Bug.用户在使用软件时总是希望其错误越少越好.最好是没有错误的.可是推出一个没有错误的软件差点儿不可能,所以非常多软件公司都在疯狂地发放补丁( ...

  3. CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】

    给定数字n,m(1<=n,m<=500000) 将n变为n*2花费2,将n变为n-3花费3,要求过程中所有数字都在[1,500000]区间内. 求将n变为m的最少花费 思路:建图 将每个数 ...

  4. luogu1979 华容道 (dijkstra+bfs)

    我想动某个点的话,一定要先把空白点移动到这个点旁边,然后调换这个点和空白点,一直重复 那么,我们就可以记一些状态(x,y,s) (s={0,1},{0,-1},{1,0},{-1,0}),表示我要动的 ...

  5. URAL 1837. Isenbaev&#39;s Number (map + Dijkstra || BFS)

    1837. Isenbaev's Number Time limit: 0.5 second Memory limit: 64 MB Vladislav Isenbaev is a two-time ...

  6. 逃离迷宫(BFS)题解

    Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有 ...

  7. SPOJ LAS(BFS)题解

    题目:VJ 思路: BFS+回溯,但是要剪枝,看了dalao的题解,超时+WA无数发,终于过了 #include<cstdio> #include<cstring> #incl ...

  8. 【HDU3085】nightmare2 双向BFS

    对于搜索树分支很多且有明确起点和终点的情况时,可以采用双向搜索来减小搜索树的大小. 对于双向BFS来说,与单向最大的不同是双向BFS需要按层扩展,表示可能到达的区域.而单向BFS则是按照单个节点进行扩 ...

  9. newcode wyh的吃鸡(优势队列+BFS)题解

    思路: 要用优势队列,因为有的+2,有的+1,所以队列中的步长是不单调的,所以找到一个答案但不一定最小,所以用优势队列把小的放在队首. 要记录状态,所以开了三维,题目和昨天做的那道小明差不多 vis开 ...

随机推荐

  1. Python自动化运维ansible从入门到精通

    1. 下载安装 在windows下安装ansible:

  2. Jackson将对象转换为json字符串时,设置默认的时间格式

    maven需要的依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifac ...

  3. Java使用RabbitMQ之公平分发

    发送消息: package org.study.workfair; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Con ...

  4. 二、core abp 数据库迁移

    一.数据库迁移-ABP(库) 1.配置链接数据库:  贴以下代码: { "ConnectionStrings": { "Default": "Serv ...

  5. vue-cli: preset预设

    preset:预设 vue create demo01 过程中,会保存预设,自动保存着 .vuerc 文件中 .vuerc 文件的位置:C:\Users\Administrator C:\Users\ ...

  6. Python——进程队列

    队列 先进先出 from multiprocessing import Queue q = Queue(5) #队列的大小 q.put(1) #放入内容 q.put(2) #放入内容 q.put(3) ...

  7. MySQL 索引长度和区分度

    首先  索引长度和区分度是相互矛盾的, 索引长度太短,那么区分度就很低,吧索引长度加长,区分度就高,但是索引也是要占内存的,所以我们需要找到一个平衡点: 那么这个平衡点怎么来定? 比如用户表有个字段 ...

  8. 清北学堂(2019 4 28 ) part 2

    主要内容数据结构: 1.二叉搜索树 一棵二叉树,对于包括根节点在内的节点,所有该节点左儿子比此节点小,所有该节点右儿子比该节点大,(感觉好像二分...) 每个节点包含一个指向父亲的指针,和两个指向儿子 ...

  9. fiddler软件测试——Fiddler抓取https设置详解(图文)

    强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)转 本文主要说明了自己在设置fiddler抓取https过程中所遇到的问题及解决步骤,特别是fiddler在设置证书的环节遇到的各 ...

  10. IntelliJ cannot log in to GitHub上传github报错解决

    重装系统,新装的Intellij IDEA上新建的项目上传github失败,报错: invalid authentication token ... 此处多为本地git用户的用户名/邮箱,与之前设置的 ...