题目描述

小胖和 ZYR 要去 ESQMS 森林采蘑菇。

ESQMS 森林间有 N N N 个小树丛, M M M 条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇。小胖和 ZYR 经过某条小径一次,可以采走这条路上所有的蘑菇。由于 ESQMS 森林是一片神奇的沃土,所以一条路上的蘑菇被采过后,又会长出一些新的蘑菇,数量为原来蘑菇的数量乘上这条路的“恢复系数”,再下取整。

比如,一条路上有 4 4 4 个蘑菇,这条路的“恢复系数”为 0.7 0.7 0.7,则第一~四次经过这条路径所能采到的蘑菇数量分别为 4 , 2 , 1 , 0 4,2,1,0 4,2,1,0。

现在,小胖和 ZYR 从 S S S 号小树丛出发,求他们最多能采到多少蘑菇。

输入格式

第一行两个整数, N N N 和 M M M。

第二行到第 M + 1 M+1 M+1 行,每行四个数,分别表示一条小路的起点,终点,初始蘑菇数,恢复系数。

第 M + 2 M+2 M+2 行,一个整数 S S S。

输出格式

一行一个整数,表示最多能采到多少蘑菇,保证答案不超过 ( 2 31 − 1 ) (2^{31}-1) (231−1)。

样例 #1

样例输入 #1

3 3
1 2 4 0.5
1 3 7 0.1
2 3 4 0.6
1

样例输出 #1

8

提示

对于 30 % 30\% 30% 的数据, N ≤ 7 N\le 7 N≤7, M ≤ 15 M\le15 M≤15

另有 30 % 30\% 30% 的数据,满足所有“恢复系数”为 0 0 0。

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 8 × 1 0 4 1 \le N\le 8\times 10^4 1≤N≤8×104, 1 ≤ M ≤ 2 × 1 0 5 1\le M\le 2\times 10^5 1≤M≤2×105, 0 ≤ 恢复系数 ≤ 0.8 0\le\text{恢复系数}\le 0.8 0≤恢复系数≤0.8 且最多有一位小数, 1 ≤ S ≤ N 1\le S\le N 1≤S≤N。

缩点、拓扑序dp - AC

一条边连接的两个点,
在同一个强连通分量内,这条边不限次数地走;
在不同强连通分量内,这条边只能走一次。
不再赘述。

使用long double

struct Edge {int u, v, w; db k;
} e[MAXM];
struct _Edge {int v, w;_Edge(int _v, int _w): v(_v), w(_w){}
};int n, m, s, dfn[MAXN], low[MAXN], sd[MAXN], js, tot, in[MAXN], dp[MAXN], a[MAXN];
bool vis[MAXN];
vector<int> g[MAXN];
vector<_Edge> ng[MAXN];
stack<int> stk;void tarjan(int u) {dfn[u] = low[u] = ++tot;stk.push(u); vis[u] = true;for (int v : g[u]) {if (!dfn[v]) {tarjan(v);ckmin(low[u], low[v]);}else if (vis[v]) {ckmin(low[u], low[v]);}}if (dfn[u] == low[u]) {int t; ++js;while (t = stk.top()) {stk.pop();sd[t] = js;vis[t] = false;if (u == t) return;}}
}void toposort() {queue<int> q;for (int i = 1; i <= js; ++i) {if (!in[i]) q.push(i);}while (!q.empty()) {int u = q.front(); q.pop();stk.push(u);for (int i = 0; i < ng[u].size(); ++i) {int v = ng[u][i].v;if (!--in[v]) q.push(v);}}
}int main() {setIO("");cin >> n >> m;for (int i = 1; i <= m; ++i) {cin >> e[i].u >> e[i].v >> e[i].w >> e[i].k;g[e[i].u].push_back(e[i].v);}cin >> s;for (int i = 1; i <= n; ++i) {if (!dfn[i]) tarjan(i);}for (int i = 1; i <= m; ++i) {if (sd[e[i].u] != sd[e[i].v]) {ng[sd[e[i].u]].push_back(_Edge(sd[e[i].v], e[i].w));++in[sd[e[i].v]];}else {do {a[sd[e[i].u]] += e[i].w;e[i].w *= e[i].k;} while (e[i].w);}}toposort();while (!stk.empty()) {int u = stk.top(); stk.pop();for (int i = 0; i < ng[u].size(); ++i) {int v = ng[u][i].v, w = ng[u][i].w;ckmax(dp[u], dp[v] + w);}dp[u] += a[u];}cout<< dp[sd[s]] << "\n";return 0;
}

Luogu P2656 采蘑菇相关推荐

  1. 洛谷 P2656 采蘑菇

    题意描述: N 个草丛,M 条单向的小道,经过每条道时可以采走这条道上的所有蘑菇,蘑菇有一个恢复系数,即在采过这一片蘑菇后又会新长出蘑菇,求从给定的点出发能采到的蘑菇最大值. 算法分析: 很容易想到最 ...

  2. 采蘑菇的克拉莉丝(树链剖分)

    采蘑菇的克拉莉丝 一个有点意思的树链剖分的题. 题意: 一棵树,有两种操作: ①:在点vvv放xxx个蘑菇. ②:将起点变为vvv. 每次计算收集所有蘑菇的代价. 收集蘑菇的代价为,起点到所在蘑菇的路 ...

  3. 【Foreign】采蘑菇 [点分治]

    采蘑菇 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output Sample Input 5 1 2 3 2 3 1 2 1 ...

  4. 牛语 and 采蘑菇的拖拉机

    牛语 (latin.pas/c/cpp) [问题描述] 奶牛们听说猪发明了一种秘密语言,叫做"猪语",因为猪不想让主人陈亮宇知道他们在商量什么.奶牛们也感觉这样很不错,所以她们想发 ...

  5. boj478. 小妹妹采蘑菇-概率

    boj478. 小妹妹采蘑菇-概率 时间限制 1000 ms 内存限制 65536 KB 题目描述 在广茂的大森林里居住着一位可爱的小妹妹,以及一位怪叔叔.这天,怪叔叔让小妹妹为他做一锅蘑菇汤,可怜的 ...

  6. luogu P2056 采花

    题目描述 萧芸斓是 Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了 n 朵花,花有 c 种颜色(用整数 1-c 表示) ,且花是排成 ...

  7. 2020 CCPC Wannafly F.采蘑菇的克拉莉丝(轻重链的应用)

    LINK 首先有一个很nativenativenative的想法 因为一个节点到父亲节点的边是容易统计贡献的,只需要算出不在子树内的蘑菇数量即可 现在只需要统计子树内蘑菇的贡献即可 当vvv节点加上x ...

  8. 采蘑菇电脑c语言,英菲尼迪终于升级英菲尼迪Q50L,内行人告诉你怎么选还配备主动降噪、胎压显示!凯美瑞都比不上它! 早买早享受...

    舒适配置对于一款车的品质感是有所反映的,想要坐起来越舒服,舒适配置就得越高,对这款车的好感度也会倍增.而说到配置高,就不得不提接下来这两位了,分别是英菲尼迪Q50L和林肯MKC.下面就赶紧来看看吧. ...

  9. 街玩小子:超级采蘑菇单机冒险游戏

    本软件尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本软件会按照本隐私权政策的规定使用和披露您的个人信息.但本软件将以高度的勤勉.审慎义务对待这些信息.除本隐私权政策另 ...

最新文章

  1. Python调用大漠插件
  2. 去掉我的电脑中WPS,百度云,360,爱奇艺盘符
  3. 程序员面试金典 - 面试题 04.03. 特定深度节点链表(BFS)
  4. android 进程
  5. (四)基于Multisim的超外差接收系统:检波器的设计
  6. [Hadoop] - 异常Cannot obtain block length for LocatedBlock
  7. 谷歌再推AI开源平台AI·ON,你有机会参与Bengio的项目了
  8. input位置_3分钟短文 | PHP 数组任意位置插入新元素,你是怎么处理的?
  9. 【斐波那切数列】LeetCode 70. Climbing Stairs
  10. Java网络编程之客户端中的Socket
  11. ubuntu 下安装 phpmyadmin 过程记录
  12. 链表反转(递归与非递归实现)
  13. bp神经网络预测案例python_详细BP神经网络预测算法及实现过程实例
  14. 《应用时间序列分析:R软件陪同》——1.4 本书的内容
  15. Golang对中文汉字进行拼音排序
  16. 磁珠 符号_超实用理解磁珠
  17. 有对象的程序猿都是怎么写代码的
  18. 【日常问题解决】docker 映射端口出错
  19. trackerslist GitHub12月无重复更新版
  20. PerfEnforce Demonstration: Data Analytics with Performance Guarantees

热门文章

  1. 使用WebUploader实现图片上传
  2. iOS开发:如何使用ShareSDK让APP快速拥有分享功能
  3. 六面阿里天猫,已拿offer,我的面经复盘总结,原来进大厂没那么难了
  4. Linux图形子系统
  5. 163网页邮箱的实现
  6. 阿里巴巴实习一年之后的感悟
  7. Unity 安卓 Unable to initialize the Unity Engine / No Enough Space to install unity
  8. mysql 8.0 新特性 统计直方图 优化执行计划SQL查询
  9. ApacheCN 计算机视觉译文集 20210218 更新
  10. linux 查看当前状态_Linux视频编辑的当前状态2018