题目链接

题意:

一颗树每个点有权值表示此点买入/卖出一本书的价格。还有n-1条边,每条边有一个权值表示经过该边需要的路费。求在树上某个起点买入一本书,某个终点卖出一本书的最大收益为多少。起点和终点可以为同一点。

思路:

为题目加入一个超级源点0和一个超级汇点n+1,源点到任意点权值为p[i],任意点到汇点权值为-p[i],连边之间权值为-w,跑一边最长路即可获得答案。

C++代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const int maxm = 400010;
const int inf  = 0x3f3f3f3f;int n,tol,head[maxn];
struct edge
{int to,cost,next;
}es[maxm];void addedge( int u , int v , int w )
{es[tol].to = v;es[tol].cost = w;es[tol].next = head[u];head[u] = tol++;
}int dis[maxn],vis[maxn];struct node
{int pos,dis;friend bool operator< ( const node&a , const node&b ){return a.dis<b.dis;}
};void dijkstra()
{memset ( dis , -inf , sizeof(dis) );memset ( vis , 0 , sizeof(vis) );dis[0] = 0;node p,q;priority_queue<node>Q;p.pos = 0;p.dis = 0;Q.push(p);while ( !Q.empty() ){p = Q.top();Q.pop();int u = p.pos;for ( int i=head[u] ; i!=-1 ; i=es[i].next ){int v = es[i].to,w = es[i].cost;if ( dis[u]+w>dis[v] ){dis[v] = dis[u]+w;p.pos = v;p.dis = dis[v];Q.push(p);}}}
}int main()
{int T; scanf ( "%d" , &T );while ( T-- ){scanf ( "%d" , &n );tol = 0;memset ( head , -1 , sizeof(head) );for ( int i=1 ; i<=n ; i++ ){int p; scanf ( "%d" , &p );addedge( 0 , i , p );addedge( i , n+1 , -p );}for ( int i=1 ; i< n ; i++ ){int u,v,w;scanf ( "%d%d%d" , &u , &v , &w );addedge ( u , v , -w );addedge ( v , u , -w );}dijkstra();printf ( "%d\n" , dis[n+1] );}return 0;
}

HDU 6201 最长路相关推荐

  1. hdu 1224 最长路

    开始用dijkstra直接求,发现不行,算法问题(1-2,(30),2-4(20),1--3(10),3--4(100)最后一个点无法更新,导致错误),后用取负,加大数法也没过. 现在(寒假了):求负 ...

  2. *【HDU - 6201】transaction transaction transaction(树形dp 或 spfa最长路 或 网络流)

    题干: 题目大意: 给出一棵n个顶点的树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过所需要的花费.现在需要你在树上选择两个点,一个作为买入商品的点,一个作为卖出商品 ...

  3. HDU4612 Warm up —— 边双联通分量 + 重边 + 缩点 + 树上最长路

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4612 Warm up Time Limit: 10000/5000 MS (Java/Ot ...

  4. 树的直径,树的最长路dp思想

    dp一直弱死了,树型dp很多基本的题都不会,最近在刷树型dp的题,把关于树的最长路的思想总结一下: 树的直径:树中距离最远的两点间的距离. 下面说几道题: hdu 2196:对于树上(双向边)的每一个 ...

  5. Dijkstra求最长路就是个坑!

    如HDU的4502,把题目抽象成一张图,把区间的头-1,这样就可以连接起来了. View Code #include <cstdio> #include <cstring> c ...

  6. POJ - 3160 Father Christmas flymouse DAG最长路

    又来做这一道缩点的裸题,发现图转化为DAG后明显是一个最长路,那么有没有固定都求法呢,查询资料后发现的确是一种固定的做法. DAG最长路,分为两种固定终点和不固定终点. 令dp[i]表示从i顶点出发能 ...

  7. UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索

    题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...

  8. POJ3160强连通+spfa最长路(不错)

    题意:       给你一个有向图,每个点上有一个权值,可正可负,然后给你一些链接关系,让你找到一个起点,从起点开始走,走过的边可以在走,但是拿过权值的点就不能再拿了,问最多能拿到多少权值? 思路: ...

  9. 算法提高课-图论-单源最短路的建图方式-AcWing 1126. 最小花费:dijkstra求最长路

    题目分析 来源:acwing 分析: 链条转移:start * (1-w1) * (1- w2) * (1- w3) -(1-wn) = 100,要start最小,则w =(1-w1) * (1- w ...

最新文章

  1. 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  2. Django连接mysql数据库浅析
  3. 【iOS】NSNumberFormatter
  4. Android NDK开发method GetStringUTFChars’could not be resolved
  5. 160个Crackme026之六段式注册码详解
  6. 和49支战队瓜分600万奖金,这场史上奖金最多的AI大赛到底比什么?
  7. TypeError: sequence item 0: expected str instance, int found
  8. FormatJS – 让你的 Web 应用程序国际化
  9. 如何删除集合(数组)中指定的元素
  10. qtableview选中第一行时表头会变色_超新颖的Word目录制作法,包你一看就会!【Word教程】...
  11. ARM嵌入式系统网络驱动中的重要数据结构
  12. JAVA-初步认识-第八章-数组工具类中静态的使用
  13. 【完美解决】arcgis engine 10.0 for cross platform C++ 在visual studio2010上编译的AE程序 的License无法初始化错误。...
  14. Java Thread.yield详解
  15. java中equals重写_Java 中equals和toString()方法重写
  16. Win11如果在桌面右击新建没有文本文档
  17. eNSP - 华为交换机常用命令
  18. 掌握这些电脑知识,你可以玩的很无耻
  19. Springboot毕设项目农村土地资源管理系统g33xzjava+VUE+Mybatis+Maven+Mysql+sprnig)
  20. KMP算法(字符串匹配)

热门文章

  1. Matlab:线条动画
  2. bim机电软件的【快速立管】功能,快速立管
  3. python微信支付接口_Python微信支付APIv3签名
  4. 在Unity中实现音口同步-02-Salsa
  5. 精益生产对成本管理有什么影响?
  6. 牛人 就是这样锤炼出来的,中兴资深工程师,嵌入式专家韦东山是这样炼成的!
  7. 独上高楼, 望尽天涯路 . (路在前方)
  8. [ Hadoop 3.2.1 官方文档 ] Hadoop 开启 Kerberos 安全模式
  9. RISC-V 能否超越 x86、Arm,成为下一代计算系统根技术的关键?
  10. MSPFET汉化美化版v1.6.1014(更新官方下载工具MSP Flasher)