CodeForces - 894E Ralph and Mushrooms (强连通缩点+dp)

题意:一张有向图,每条边上都有wi个蘑菇,第i次经过这条边能够采到w-(i-1)*i/2个蘑菇,直到它为0。问最多能在这张图上采多少个蘑菇。

分析:在一个强连通分量内,边可以无限次地走直到该连通块内蘑菇被采完为止,因此每个强连通分量内的结果是确定的。

设一条边权值为w,最大走过次数为t,解一元二次方程得 t = (int)(1+sqrt(1+8w));则该边对所在连通块的贡献为w*t - (t-1)*t*(t+1)/6。

而不在任何一个强连通分量内的边,最多只能走一次。所以在缩点后的DAG上进行dp即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn =1e6+5;
struct Edge{int v,next;LL val;  
}edges[maxn],E[maxn];
int head[maxn],tot,H[maxn],tt;
stack<int> S;
int pre[maxn],low[maxn],sccno[maxn],dfn,scc_cnt;
LL W[maxn];
LL dp[maxn];
void init()
{tot = dfn = scc_cnt=tt=0;memset(H,-1,sizeof(H));memset(W,0,sizeof(W));memset(dp,0,sizeof(dp));memset(pre,0,sizeof(pre));memset(sccno,0,sizeof(sccno));memset(head,-1,sizeof(head));
}void AddEdge(int u,int v,LL val)   {edges[tot] = (Edge){v,head[u],val};head[u] = tot++;
}void Tarjan(int u)
{int v;pre[u]=low[u]=++dfn;S.push(u);for(int i=head[u];~i;i=edges[i].next){v= edges[i].v;if(!pre[v]){Tarjan(v);low[u]=min(low[u],low[v]);}else if(!sccno[v]){low[u]=min(low[u],pre[v]);}}if(pre[u]==low[u]){int x;++scc_cnt;for(;;){x = S.top();S.pop();sccno[x]=scc_cnt;if(x==u)break;}}    
}void nAddEdge(int u,int v,LL w)
{E[tt] = (Edge){v,H[u],w};H[u] = tt++;
}LL dfs(int u)
{if(dp[u]) return dp[u];for(int i=H[u];~i;i=E[i].next){int v = E[i].v;dp[u] = max(dp[u],dfs(v)+E[i].val);}dp[u]+=W[u];return dp[u];
}int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifint N,M; while(scanf("%d%d",&N,&M)==2){init();int st,u,v; LL w;while(M--){scanf("%d%d%lld",&u,&v,&w);AddEdge(u,v,w);}scanf("%d",&st);for(int i=1;i<=N;++i){if(!pre[i]){Tarjan(i);}}for(int u =1;u<=N;++u){for(int i =head[u];~i;i = edges[i].next){v = edges[i].v;LL w = edges[i].val;if(sccno[u]!=sccno[v]){nAddEdge(sccno[u],sccno[v],w);}else{int t = (int)(1+sqrt(1+8*w))/2;W[sccno[u]] += (LL)t*w - (LL)(t-1)*t*(t+1)/6;}}}for(int i=1;i<=scc_cnt;++i){if(!dp[i]){dfs(i);}}printf("%lld\n",dp[sccno[st]]);}return 0;
}

 

转载于:https://www.cnblogs.com/xiuwenli/p/9494938.html

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

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

相关文章

工作328:uni-两个页面对象传递

getDetailList(record){console.log(record)uni.navigateTo({url:../formdaliyList/formdaliyList?recordencodeURIComponent(JSON.stringify(record))})},onLoad(e){/* JSON.parse() */let obj JSON.parse(decodeURIComponent(e.record));console.log(obj)},

vue-js 特殊变量$event常识

背景 如果我们要阻止默认事件&#xff0c;在 chrome 等浏览器中&#xff0c;我们可能要写一个&#xff1a; event.preventDefault(); 而在 IE 中&#xff0c;我们则需要写&#xff1a; event.returnValue false; jquery &#xff0c;跨浏览器的实现&#xff0c;我们统一只…

七、线性表的链式存储结构

1、问题引入 开发数组类模板的原因在于&#xff1a;在创建基于顺序存储结构的线性表时&#xff0c;发现这样的线性表可能被误用&#xff0c;因为重载了数组访问操作符&#xff0c;使用时跟数组类似&#xff0c;但是线性表和数组有很大的区别&#xff0c;所以激发了新的需求&…

工作331:uni-修改未完成数据动态渲染

<view v-for"(item,index) in TaskUnComplete" class"u-m-b-12" style"margin-left:30rpx;margin-top: 76rpx;">未完成-{{index1}}条</view><view v-for"(item,index) in TaskUnComplete"><view style"padd…

使用vue-CLI构建vue工程项目

vue2是对新手很友好的MVVM框架&#xff0c;有完善的官方中文文档&#xff0c;阅读起来也非常容易理解&#xff0c;由浅入深&#xff0c;示例完整。同时官方也提供了一个开箱即用的 vue-cli 帮我们生成一个完整的项目框架。 vue.js 著名的全家桶系列, 包含了&#xff0c; vue-ro…

Confluence 6 在 Apache 或者系统级别阻止垃圾

如果一个垃圾发布机器人攻击你的 Confluence 站点&#xff0c;这些程序可能来自于同一个 IP 地址&#xff0c;或者是一个比较小范围的 IP 地址段。希望找到攻击者的 IP 地址&#xff0c;请参考 Apache access logs 中的实时内容同时找到这些攻击者攻击的页面。 例如&#xff0c…

工作332:uni-uview上传获取到对应数据

let lists [];// 通过filter&#xff0c;筛选出上传进度为100的文件(因为某些上传失败的文件&#xff0c;进度值不为100&#xff0c;这个是可选的操作)lists this.$refs.uUpload.lists// 如果您不需要进行太多的处理&#xff0c;直接如下即可console.log(lists)

layui select框代码实现自动下拉

因为项目有个字段需要根据输入匹配类似选项通过下拉框表现出来&#xff0c;然后点击选择... 项目使用的layui框架&#xff0c;这个框架有个缺点就是一些H5标签使不上用场&#xff0c;比如datalist...&#xff0c;所以只能尝试寻找它自带的下拉事件怎么用了 //代码自动点击 se…

Chino的数列

题解&#xff1a; 一道练代码能力的题目。。 首先很显然他是一道平衡树裸题 第5个操作是势能分析维护最大值最小值就可以了 另外设置虚点和noip2017队列那题一样&#xff08;不过我只写过线段树&#xff09; 具体细节&#xff1a; 1.内存池&#xff0c;要直接判断(!x) 因为可能…

css 英文换行且单词始终保持在一起

方法一&#xff1a; 想让单词不换行用 word-break:keep-all; white-space:nowrap; 方法二&#xff1a; dispaly:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap; a换行且a内文本不换行 display:block;或者display:inline-block; width:xxpx;

工作333:uni-增加添加成功提示

this.$u.api.getPartyAdd(this.form).then(res > {console.log(res)if(res.data.code200){/* uni.showLoading({title: 添加中}); */this.$refs.uToast.show({title: res.data.message,type: success,})setTimeout(function () {uni.navigateTo({url: "../notice_notic…

HDU 6064 RXD and numbers

传送门 有向图生成树计数 &#xff08;度数 ->入度->外向树&#xff09; BEST定理 &#xff08;不定起点的欧拉回路个数某点为根的外向树个数&#xff08;存在欧拉回路->每个点为根的外向树个数相等&#xff09;*&#xff08;每个点的度数&#xff08;存在欧拉回路-&g…

vue.js框架的生命周期:常用钩子函数

//组件实例化之前执行的函数 beforeCreate:function () { alert("组件实例化之前执行的函数") }, //组件实例化完毕执行的函数 created:function () { alert("组件实例化完毕执行的函数") }, //组件挂载前&#xff0c;页面仍未展示&#xff0c;但虚拟Dom已…

工作334:uni-控制整个label区域可选

<navigator url"../LevineHua-editor/LevineHua-editor" class"single"><u-form-item label"内容" label-width"100%" prop"content" class"label-left"><u-input placeholder"请输入公告内容…

零基础Python知识点回顾(一)

如果你是小白&#xff0c;建议只要安装官网的python-3.7.0-amd64.exe 然后在电脑cmd命令提示符 输入检查是否已经安装pip,一般安装了python都会有的。 >pip (有的话会提示一大串说明&#xff0c;没有的话会提示没有) 假设有了pip&#xff0c;下面来用pip 来安装…

vue.js常用命令

安装webpack&#xff1a; npm install webpack webpack-cli -g 安装vue-cli&#xff1a; npm install -g vue-cli 用 vue-cli 来构建项目&#xff1a; vue1.x——vue init webpack vue-demo vue2.x——vue init webpack-simple vue-demo 安装路由&#xff1a; npm instal…

工作335:uni-增加表单验证

<u-form-item prop"account"><u-input v-model"form.account" placeholder"请输入账号"></u-input></u-form-item><u-form-item prop"password"><u-input class"inp" v-model"form.p…

使用IDEA 创建SpringBoot项目

首先File ->New -> project ->Spring Initializr ->next 如果没有Spring Initializr 选择右下角config ->setting 搜索Springboot 勾选 然后apply ok 第二步&#xff1a; 在项目中写上自己需要的名称 type 选择 maven project ->next 第三步&#xff1a;…

工作335:uni-ele-el-date-picker限制选择时间

<el-form-item :label"index 1 .发布时间"><el-date-picker v-model"task.start_time" :picker-options"pickerOptions" :disabled"viewMode"/></el-form-item>pickerOptions: {disabledDate(time) {return time…

PhantomJS 一个隐形的浏览器

下载地址: http://phantomjs.org/download.html 使用方法: 下载压缩包解压出来找到phantomjs.exe 放到python的根目录下 转载于:https://www.cnblogs.com/kaibindirver/p/9509684.html