「LYOI2018 Summer」Hzy's Rabbit Candy

题目描述

Hzy 和她的 m 只兔兔在一个 n 个点 m 条边的有向无环图上玩。

为了让兔兔们开心,Hzy 带了一些糖。Hzy 可以从任何一个点开始,走到任何一个点结束。在这途中,每当 Hzy 经过一个点 i,她会捡到 a_i 块糖;每当 Hzy 经过一条边 j,这条边上的兔兔会吃掉她的 b_j块糖。

Hzy 希望能在结束时保留尽量少的糖,请求出 Hzy 在结束时的糖的数量相对于开始时的糖的数量最多减少多少(请注意,Hzy 的糖可能无论如何都无法减少,此时答案是一个非正整数)。

输入格式

第一行两个正整数 n、m,表示点数和边数。
之后的一行 n 个正整数以空格隔开,第 i 个正整数 aia_ia​i​​ 表示经过第 iii 个点 Hzy 会捡到的糖的数量。
之后的 m 行,每行三个正整数 uj,vj,bj表示一条从 u_j 到 v_j的边,Hzy 经过这条边时,兔兔会吃掉 b_j块糖。

输出格式

一行一个正整数,表示 Hzy 在结束时的糖的数量相对于开始时的糖的数量最多减少多少。

样例输入

3 5
1 2 3
1 2 10
1 2 11
2 3 10
2 3 11
1 3 15

样例输出

16

题目链接 :https://ly.men.ci/problem/398


思路:dp+拓扑排序
实现工具:邻接表
邻接表不会的戳这---->https://www.cnblogs.com/ECJTUACM-873284962/p/6905416.html
 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<queue>
5 using namespace std;
6
7 struct edge{
8 int s,t,next,wi;
9 }edge[500007];
10
11 long long ans=-100000000;
12 int cnt,head[100007]; //head[u]表示u边的序列号
13 int k[100007] ; // k[i]表示第i个节点所获得的糖果数
14 int in[100007]; //in[i]可以成为边的点 和到它的入度数
15 long long f[100007];
16 void add(int u,int v,int w){ //邻接表
17 cnt++;
18 edge[cnt].s=u;
19 edge[cnt].t=v;
20 edge[cnt].wi=w;
21 edge[cnt].next=head[u]; //next表示u边的上个序列号
22 head[u]=cnt; //这时在标记当前边的序号,比较优秀的方法
23
24 }
25 int main(){
26 int n,m;
27 cin>>n>>m;
28 int vi;
29 for(int i=1;i<=n;i++){
30 cin>>vi;
31 k[i]=vi*(-1); //因为在这道题中求失去的最大值,所以获得就相当于加个负数
32 f[i]=k[i];
33 ans=max(ans,f[i]); //题面说从任意一点开始到任一点结束,so我们不妨从最大的点开始之后不断更新答案
34 } for(int i=1;i<=m;i++){
35
36 int u,v,w;
37 cin>>u>>v>>w;
38 add(u,v,w);
39 in[v]++; //因为以v的点都是可以成边的点
40 //将这些点打上标记 ,入度+1
41 }
42 queue<int> q;
43 for(int i=1;i<=n;i++){
44 if(!in[i])q.push(i); //这样队列中的点都是有边的
45 }
46
47 //开始拓扑排序啦
48 while(!q.empty()){
49 int u=q.front();
50 q.pop();
51 for(int i=head[u];i;i=edge[i].next){
52 int v=edge[i].t;
53 long long v1=f[u]+edge[i].wi+k[v];
54 f[v]=max(f[v],v1); //dp,对于当前这个点来说选与不选的价值
55 ans=max(ans,f[v]); //ans更新答案
56 in[v]--;//in数组的作用在这里还有将其入度-1;
57 if(!in[v])q.push(v); //一开始我们是将循环的每个点都pop出去了,但是这个点目前还有入度,所以我们还得将它压进队列
58 }
59 }
60 cout<<ans<<endl;
61 return 0;
62 }
63

「LYOI2018 Summer」Hzy's Rabbit Candy----拓扑排序问题的更多相关文章

  1. 「Usaco2012 Dec」第一(字典树+拓扑排序)

    (我恨字符串) 惯例化简题目:给定n个字符串,可以改变字符的相对大小(在字典序中的大小),问:字符串i是否能成为最小的字符串(字典序) 解题过程: 首先你可以预处理出来26的全排列然后暴力然后你只要用 ...

  2. 前端构建工具之gulp(一)「图片压缩」

    前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...

  3. fir.im Weekly - 如何打造 Github 「爆款」开源项目

    最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...

  4. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

  5. Notepad++ 开启「切分窗口」同时检视、比对两份文件

    Notepad++ 是个相当好用的免费纯文本编辑器,除了内建的功能相当多之外,也支持外挂模块的方式扩充各方面的应用.以前我都用 UltraEdit 跟 Emeditor,后来都改用免费的 Notepa ...

  6. 「zigbee - 1」工欲善其事必先利其器 - IAR for 8051 IDE customization

    最近在实验室做一些 Zigbee 相关的事情,然而一直没在博客上记录啥东西,也不像原来在公司有动力在 Confluence wiki 上扯东扯西.直到前些阵子,跑到 feibit 论坛上(国内较大的一 ...

  7. 「C语言」文件的概念与简单数据流的读写函数

    写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实, ...

  8. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  9. 如何对抗 WhatsApp「蓝色双勾」-- 3 个方法让你偷偷看讯息

    WhatsApp 强制推出新功能「蓝色双勾 (✔✔)」 ,让对方知道你已经看过讯息.一众用户反应极大,因为以后不能再藉口说未看到讯息而不回覆.究竟以后 WhatsApp 是否真的「更难用」? 幸好还有 ...

随机推荐

  1. JavaCV更新到1.5.x版本后的依赖问题说明以及如何精简依赖包大小

    javaCV全系列文章汇总整理 javacv教程文档手册开发指南汇总篇 前言 JavaCV更新到1.5.x版本,依赖包也迎来了很大变化,体积也变大了不少.很多小伙伴们反馈,之前很多1.3.x和1.4. ...

  2. Spring的自动装配与依赖注入

    Spring的自动装配与依赖注入 装配 = 创建Bean + 注入Bean 创建Bean 自动发现 显式注册Bean 注入Bean 基于配置的注入 自动注入 Spring的装配分为显式装配和隐式装配, ...

  3. 【MyBatis】自定义 MyBatis

    自定义 MyBatis 文章源码 执行查询信息的分析 我们知道,MyBatis 在使用代理 DAO 的方式实现增删改查时只做两件事: 创建代理对象 在代理对象中调用 selectList() 配置信息 ...

  4. MySQL45讲:一条update语句是怎样执行的

    首先创建一张表: create table T(ID int primary key,c int); 如果要更新ID=2这行+1:应该这样写 update T set c=c+1 where ID=2 ...

  5. 记汉化zabbix后图形界面没有任何汉字的问题

    1.安装并汉化后zabbix,所有的图形界面都没有任何字图,如下图 2.郁闷不已,去/var/www/html/zabbix/fonts目录下面查看,发现之前上传字体的文件名后缀是.ttc,猜着一般见 ...

  6. 【EXP】比较大的dmp文件导入的时候可以将界面关掉

    有一个需求,将一个dmp文件导入到数据库中,但是这个crt的回话有timeout,3分钟,所以一到三分钟就掉线,导入就失败了,这让人很头疼,关闭界面,imp也就终止了 最后想到了几招,分享一下: 1. ...

  7. pycharm工具的使用

    一.Pycharm常用快捷键 快捷键 作用 备注  ctrl + win + 空格  自动提示并导包  连按两次  ctrl + alt + 空格  自动提示并导包  连按两次  Alt + Ente ...

  8. [Usaco2008 Mar]牛跑步

    题目描述 BESSIE准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘, 然后走回牛棚. BESSIE也不想跑得太远,所以她想走最短的路经. 农场上一共有M (1 < ...

  9. ORACLE 归档日志打开关闭方法(转载)

    一 设置为归档方式 1 sql> archive log list; #查看是不是归档方式 2 sql> alter system set log_archive_start=true s ...

  10. Django Signals

    信号 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django内置的信号 Model si ...