博客
关于我
hdu6201 transaction transaction transaction(新建源汇点,带负权最长路)
阅读量:250 次
发布时间:2019-03-01

本文共 799 字,大约阅读时间需要 2 分钟。

题意:

给定n个点的树,每个点有一个权值a(i),

要求找到两个不同的点S和T,满足a(T)-a(S)-dist(S,T)最大,dist(x,y)是点x和y的树上距离。
输出最大值。

数据范围:n<=1e5

解法:

题目给的是树,很容易往树形dp想,但是树形dp应该很难写,挺坑的.建立源点0,向n个点建立有向边,边权为-a[i],建立汇点n+1,n个点都向它有向边,边权为a[i],令原图的双向边边权取反变为负数,那么点0到点n+1的最短路就是式子的答案.

code:

#include
using namespace std;const int maxm=1e5+5;int head[maxm],nt[maxm<<2],to[maxm<<2],w[maxm<<2],tot;int mark[maxm];int d[maxm];int a[maxm];int n;void add(int x,int y,int z){ tot++;nt[tot]=head[x];head[x]=tot;to[tot]=y;w[tot]=z;}void spfa(int st){ queue
q; q.push(st); for(int i=1;i<=n+1;i++){ d[i]=-1e9; mark[i]=0; } d[st]=0; mark[st]=1; while(!q.empty()){ int x=q.front();q.pop(); mark[x]=0; for(int i=head[x];i!=-1;i=nt[i]){ int v=to[i]; if(d[v]

转载地址:http://wdkv.baihongyu.com/

你可能感兴趣的文章
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>