王小呆的模拟赛
王小呆的模拟赛 题解
\(T1\ money\)
题目背景:
王小呆又陷入自己的梦里。(活在梦里。。。)
题目描述:
王小呆是一个有梦想的小菜鸡,那就是赚好多好多的钱。现在机会来了,在他面前是一个迷宫,一共有N个点,M条路,王小呆可以在这些路上随便走,并且最重要的是,这些路上都有着数额不同的钱,王小呆每走过一条路,就可以得到这条路上所有的钱(我们认为王小呆特别贪婪,所以他用来装钱的袋子是无穷大的。。。),因为王小呆的梦很神奇,所以当一条路上的钱被他取走之后,这条路上又会出现一些新的钱,数量为原来钱的数量乘上这条路的“恢复系数”,向下取整。比如,一条路上有4块钱,这条路的“恢复系数”为0.7,则先后四次经过这条路能得到的钱分别为:4,2,1,0。现在王小呆在第S个点。因为王小呆还没有意识到自己活在梦里,所以他依旧十分兴奋,然而他的智商又不够,只能请聪明的你帮助他计算出他一共能够拿到多少钱。
注意:所有的边全部是单向边。不然岂不是沙比题???
输入输出格式:
输入格式:
第一行,N和M。
第2……M+1行,每行四个数字,分别表示一条路的起点,终点,初始钱数,恢复系数。
第M+2行,一个整数S。
输出格式:
一个数字,表示最多能拿到多少钱。
输入输出样例:
输入样例:
3 3
1 2 4 0.5
1 3 7 0.1
2 3 4 0.6
1
输出样例:
8
说明
对于 \(0\%\) 的数据,保证是样例
对于 \(30\%\) 的数据 保证\(n<=10\)
对于另外 \(30\%\) 的数据 保证恢复系数为\(0\)(良心)
对于 \(100\%\) 的数据,保证$ N<=M,M<=100000,0.1<=恢复系数<=0.8$且仅有一位小数
保证
$ 1<=S<=N$
不保证数据没有坑。std没有考虑自边和重边以及不连通,是过掉的...所以请大家当做无重边无自环做即
题解
吐槽一句,我一直不知道把输入输出样例写到代码块里合适,还是应该写到引用里\(QAQ\)。
暴力:
直接跑最长路。期望得分\(30\)分
正解:
先跑一遍\(Tarjan\),之后缩点,在连边的时候顺便算出在每一个强连通分量里能取到的最多边权和作为点权。 最后跑一遍\(Spfa\)(有点权)求最长路径。 期望得分\(100\)分
拓扑+\(dp\)也可以过。我就不会了\(QAQ\)
PS
话说这题是采蘑菇的那个原题呢。
\(Code\)