【洛谷 2656】采蘑菇

本文介绍了一道编程题目,涉及在ESQMS森林中,小胖和ZYR采蘑菇的问题。每条小径上的蘑菇会根据特定的恢复系数重新生长。题目要求计算两人从S号小树丛出发最多能采到多少蘑菇。30%的数据规模较小,其余数据中所有恢复系数为0。解决方案包括使用Tarjan缩点和SPFA算法求最长路。作者分享了编程思路和遇到的洛谷数据特性,并提到自己的代码在优化后通过了测试。
摘要由CSDN通过智能技术生成

题目描述
小胖和ZYR要去ESQMS森林采蘑菇。
ESQMS森林间有N个小树丛,M条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇。小胖和ZYR经过某条小径一次,可以采走这条路上所有的蘑菇。由于ESQMS森林是一片神奇的沃土,所以一条路上的蘑菇被采过后,又会长出一些新的蘑菇,数量为原来蘑菇的数量乘上这条路的“恢复系数”,再下取整。
比如,一条路上有4个蘑菇,这条路的“恢复系数”为0.7,则第一~四次经过这条路径所能采到的蘑菇数量分别为4,2,1,0.
现在,小胖和ZYR从S号小树丛出发,求他们最多能采到多少蘑菇。
对于30%的数据,N<=7,M<=15
另有30%的数据,满足所有“恢复系数”为0
对于100%的数据,N<=80,000,M<=200,000,0.1<=恢复系数<=0.8且仅有一位小数,1<=S<=N.

输入输出格式
输入格式:
第一行,N和M
第2……M+1行,每行4个数字,分别表示一条小路的起点,终点,初始蘑菇数,恢复系数。
第M+2行,一个数字S

输出格式:
一个数字,表示最多能采到多少蘑菇,在int32范围内。

输入输出样例
输入样例#1:
3 3
1 2 4 0.5
1 3 7 0.1
2 3 4 0.6
1
输出样例#1:
8

Tarjan缩点+spfa

先跑一边Tarjan,缩点,重构图,变成DAG,再搞spfa求最长路。

洛谷的数据有点奇怪,一开始打错了没考虑点权给过了,加上点权又过了。
标程的双端队列优化不是很懂,而且并不是特别快,494ms。自己的代码不加优化560ms,试着加优化以后最快达到了372ms,洛谷给过了,,,,

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#inclu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值