P2656 采蘑菇

P2656 采蘑菇

题意:

有n个点,m个单向边,每个边都有边权,如果经过这个边,可以获得其边权,而其边权会变成原来的p倍(0.1<=p<=0.8),向下取整
从s点出发,问最多可以采到的蘑菇

题解:

因为是单向边,除非出现一个环,不然每个边最多只能走一次,如果有一个环,环上的边权可以一直获取,直到边权为0.
所以我们可以用tarjan进行缩点,将这个环上所有得到的价值加起来,赋给缩成的点x。
缩完点后,就同时有点权(在之前环上所能获取的价值)和边权,且无环,那直接跑一个拓扑+dp就可以,在拓扑过程中转移dp,然后取最大即可
总结:tarjan缩点+拓扑dp

代码:

// Problem: P2656 采蘑菇
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2656
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// By Jozky#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#elsestartTime= clock();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 3e5 + 9;
double hui[maxn];
int n, m;
struct node{int v,w;double k;
};
vector<node>vec[maxn];
int dfn[maxn], low[maxn], vis[maxn];
int color[maxn];
int tot= 0, col= 0;
int degree[maxn];
vector<PII> vec2[maxn];
vector<int> co[maxn];
int newa[maxn];
stack<int> s;
void tarjan(int x)
{vis[x]= 1;dfn[x]= low[x]= ++tot;s.push(x);for (auto it : vec[x]) {int v= it.v;int w= it.w;if (!dfn[v]) {tarjan(v);low[x]= min(low[x], low[v]);}else if (vis[v]) {low[x]= min(low[x], dfn[v]);}}if (dfn[x] == low[x]) {col++;while (1) {int top= s.top();s.pop();color[top]= col;vis[top]= 0;if (top == x)break;}}
}
int dp[maxn];
void solve()
{for (int i= 1; i <= n; i++) {if (!dfn[i])tarjan(i);}for (int i= 1; i <= n; i++) {for (auto it : vec[i]) {int v= it.v;int w= it.w;double k=it.k;if (color[i] != color[v]) {degree[color[v]]++;vec2[color[i]].push_back({color[v], w});}else {while(w){newa[color[v]]+=w;w=w*k/10;}}}}
}
void troop(int s)
{queue<int> q;for(int i=1;i<=col;i++){if(!degree[i])q.push(i);dp[i]=-INF_int;}dp[color[s]]=newa[color[s]];q.push(s);while (!q.empty()) {int u= q.front();q.pop();for (auto it : vec2[u]) {int v= it.first;int w= it.second;degree[v]--;dp[v]= max(dp[v], dp[u] + newa[v] + w);if (!degree[v])q.push(v);}}
}
int main()
{rd_test();read(n, m);for (int i= 1; i <= m; i++) {int u, v, w;double s;scanf("%d%d%d%lf", &u, &v, &w, &s);vec[u].push_back({v, w,s*10});}int s;read(s);solve();troop(s);int maxx= 0;for (int i= 1; i <= col; i++)maxx= max(dp[i], maxx);cout << maxx;//Time_test();
}
//92

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #764 (Div. 3)

A. Plus One on the Subset B. Make AP C. Division by Two and Permutation D. Palindromes Coloring E. Masha-forgetful F. Interacdive Problem G. MinOr Tree 就是最小值逐步增加到最大值的过程。 int main() {int t;scanf("%d", &t);for(int _ 1;_ <…

你必须知道的 SmartSql

介绍SmartSql MyBatis Cache(Memory | Redis) R/W Splitting Dynamic Repository Diagnostics ......简洁、高效、高性能、扩展性、监控、渐进式开发&#xff01;她是如何工作的&#xff1f;SmartSql 借鉴了 MyBatis 的思想&#xff0c;使用 XML 来管理 SQL &#xff0c;并…

CF785D Anton and School - 2

CF785D Anton and School - 2 题意&#xff1a; 给定一个长度≤210^5由(和)组成的字符串&#xff0c;问有多少个子串&#xff08;可以不连续&#xff09;&#xff0c;前半部分是由(组成后半部分由)组成. 题解&#xff1a; 怎么括号匹配能出这么多题 如何才能不重不漏的选出…

OsharpNS轻量级.net core快速开发框架简明入门教程

OsharpNS官方资源项目地址&#xff1a;https://github.com/i66soft/osharp-ns20演示地址&#xff1a;https://www.osharp.org 直接使用QQ登录可以查看效果文档地址&#xff1a;https://docs.osharp.org 正在完善中....发布博客&#xff1a;https://www.cnblogs.com/guomingfeng…

cf1491C. Pekora and Trampoline

cf1491C. Pekora and Trampoline 题意&#xff1a; 有n个蹦床&#xff0c;每个蹦床有它的弹力值bib_{i}bi​,从i蹦床起跳可以落到ibiib_{i}ibi​的位置上(前提是这个位置有蹦床)&#xff0c;跳完后&#xff0c;蹦床的弹力值会减1&#xff0c; 题解&#xff1a; 对于一个蹦床…

.net core 注入机制与Autofac

本来是要先出注入机制再出 管道 的&#xff0c;哈哈哈……就是不按计划来……这里扯扯题外话&#xff1a;为什么要注入&#xff08;DI&#xff0c;dependency-injection&#xff09;&#xff0c;而不用 new 对象&#xff1f;可能我们都很清楚&#xff0c;new 对象所造成的影响就…

2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛

2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛 题号题目知识点AChuanpai水题BHotpot贪心CTriangle PendantDRock Paper Scissors队友做的不知道EDon’t Really Like How The Story Ends思维栈FDirection SettingGHourly Coding ProblemHNihongo wa Muzukashii D模拟IMon…

浅析 .Net Core中Json配置的自动更新

Pre很早在看 Jesse 的Asp.net Core快速入门的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重"造轮子"情节的程序员,最近在折腾一个博客系统,也想造出一个这样能自动更新以Mysql为数据源的ConfigureSource…

E. Don‘t Really Like How The Story Ends(代码未补)

Don’t Really Like How The Story Ends 题意&#xff1a; 有n个点&#xff0c;m个边&#xff0c;现在要从1号边开始求dfs序&#xff0c;问最少加多少边可以是的dfs序是从1到n&#xff1f; 题解&#xff1a; dfs序的过程中&#xff0c;不走到叶子节点我们是无法回溯的&…

记录美好生活 艹

Red Black Tree 磨磨蹭蹭地写虚树&#xff0c;结果半天没出来。大佬说 二分 求公共节点的lca&#xff0c;一下就出来了  二分就是取那些要变更的点的lca 然后判断这样log^2&#xff0c;好像也可以排序差分区间和弄到log&#xff0c;虚树就是暴力枚举然后换根dp&#xff0c;没…

.NET Core 迁移躺坑记续集--Win下莫名其妙的超时

继上一集.NET Core 迁移躺坑记里说到遇到的各种问题并且弄了n个解决方案之后&#xff0c;特别是对于问题4的解决方案对于切换了HttpClientFactory我用了你家netcore 2.1下专门解决之前HttpClient口病已久的灵丹妙药了&#xff0c;信心满满的上线…..然后挂了&#xff0c;该超时…

gym103117L. Spicy Restaurant

gym103117L. Spicy Restaurant 题意&#xff1a; 有n个点&#xff0c;m个边&#xff0c;每个点都有一个能量值&#xff0c;现在有q个人&#xff0c;每个人有自己的能量值&#xff0c;现在每个人都要去离自己最近且能量值小于等于自身的点。 1<n,m<1e5 1<q<5e5 1&…

使用Entity Framework Core访问数据库(Oracle篇)

前言哇。。看看时间 真的很久很久没写博客了 将近一年了。最近一直在忙各种家中事务和公司的新框架 终于抽出时间来更新一波了。本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。强调一下&#xff0c;本篇文章发布之前 关于Entity Framework Core访问oracl…

gym103117J. Ants

gym103117J. Ants 题意&#xff1a; n个蚂蚁在长度为1e91的木棍上&#xff0c;第i个蚂蚁在ai位置上&#xff0c;朝向为0/1&#xff08;0表示左&#xff0c;1表示右&#xff09;,如果蚂蚁相遇则彼此调转方向。木棍两侧分别有厚度为a和b的墙&#xff0c;蚂蚁每撞一次墙&#xf…

Asp.Net Core Docker镜像更新系统从wheezy改为stretch

之前写过一个在Asp.Net Core里调用System.Drawing.Common绘图的DEMO&#xff0c;部署到Docker里运行&#xff0c;需要更新Asp.Net Core镜像的操作系统。https://www.cnblogs.com/sunnytrudeau/p/9384620.html当时用的阿里云的源RUN echo "deb http://mirrors.aliyun.com/d…

Monster Hunter(2020南京M)

Monster Hunter(2020南京M) 题意&#xff1a; 给你一颗树&#xff0c;树上每个节点都是一个hpi 血量的怪物。打败每个怪物所需要的能量值为hpi 所 有 存 活 的 直 接 子 节 点 的 hpj 。每次必须要消灭父节点后才能消灭子节点。此外你还有m个魔咒&#xff0c;每个魔咒可以不…

网络数据采集(AngleSharp)-使用AngleSharp做html解析

有这么一本Python的书: <<Python 网络数据采集>>我准备用.NET Core及第三方库实现里面所有的例子. 这是第一部分, 主要使用的是AngleSharp: https://anglesharp.github.io/(文章的章节书与该书是对应的)发送Http请求在python里面这样发送http请求, 它使用的是pytho…

ASP.NET Core在Azure Kubernetes Service中的部署和管理

目标部署&#xff1a;掌握将aspnetcore程序成功发布到Azure Kubernetes Service&#xff08;AKS&#xff09;上管理&#xff1a;掌握将AKS上的aspnetcore程序扩容、更新版本准备工作注册 Azure 账户官网免费帐户Azure 免费帐户仅适用于新用户&#xff0c;并且仅限每个客户一个免…

P4342 [IOI1998]Polygon

P4342 [IOI1998]Polygon 题意&#xff1a; 给你一个n个点的环&#xff0c;第一步&#xff0c;删除其中一条边。随后每一步&#xff1a; 选择一条边连接的两个顶点V1和V2&#xff0c;用边上的运算符计算V1和V2得到的结果来替换这两个顶点。 游戏结束时&#xff0c;只有一个顶点…

三元环讲解

参考文章&#xff1a; 不常用的黑科技——「三元环」 引入 给定一张无重边&#xff0c;无自环的无向图&#xff0c;点数为n&#xff0c;边数为m&#xff0c;且n&#xff0c;m同阶&#xff0c;问有多少个无序三元组(i,j,k),使得存在&#xff1a; 有一个连接i&#xff0c;j的边…