「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. openstack octavia的实现与分析(二)原理,架构与基本流程

    [了解] 其实说白了,Octavia就是将用户的API请求经过逻辑处理,转换成Haproxy或者Nginx的配置参数,下发到amphora虚机中. Octavia的内部实现中,逻辑流程的处理主要使用T ...

  2. Docker-ce Centos8 笔记二:常见问题

  3. OSTU大津法图像分割

    OSTU图像分割 最大类间方差法,也成大津法OSTU,它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分 ...

  4. 【MyBatis】MyBatis 入门

    MyBatis 入门 文章源码 软件框架 软件框架伴随着软件工程的发展而出现,所谓的软件框架,是提取了特定领域的软件的共性部分所形成的软件体系,它并不是一个成熟的软件,更像是一个半成品.开发者在框架之 ...

  5. 阿里面试官:什么是MySQL索引,为什么要有索引?

    一.什么是索引? 索引就好比字典的目录一样 我们通常都会先去目录查找关键偏旁或者字母再去查找 要比直接翻查字典查询要快很多 二.为什么要有索引? 然而我们在使用mysql数据库的时候也像字典一样有索引 ...

  6. SonarQube学习(六)- SonarQube之扫描报告解析

    登录http://192.16.1.105:9000,加载项目扫描情况 点击项目名称,查看报告总览 开发人员主要关注为[问题]标签页. 类型 主要关注为bug和漏洞. 其中bug是必须要修复的,漏洞是 ...

  7. 音视频入门-20-BMP、PNG、JPG、GIF静态图生成GIF动态图

    * 音视频入门文章目录 * 静态图 -> 动态图 前面 [18-手动生成一张GIF图片] 和 [19-使用giflib处理GIF图片] 生成的 GIF 每一帧都是一个颜色,平时用到的 GIF 每 ...

  8. 【网络】trunk和vlan配置

    篇一 : trunk配置和vlan配置 trunk配置 Switch>enable ? ? ?//进入特权模式 Switch#conf t ? ? ?//进入配置模式 Switch(config ...

  9. 【RAC】安装cluster软件 在节点2执行root.sh脚本

    安装cluster软件  在节点2执行root.sh脚本 报错如下: Running vipca(silent) for configuring nodeapps /db/oracle/product ...

  10. pytorch——不用包模拟简单线性预测,数据类型,创建tensor,索引与切片

    常见的学习种类 线性回归,最简单的y=wx+b型的,就像是调节音量大小.逻辑回归,是否问题.分类问题,是猫是狗是猪 最简单的线性回归y=wx+b 目的:给定大量的(x,y)坐标点,通过机器学习来找出最 ...