HDU 6201 最长路
题目链接
题意:
一颗树每个点有权值表示此点买入/卖出一本书的价格。还有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 最长路相关推荐
- hdu 1224 最长路
开始用dijkstra直接求,发现不行,算法问题(1-2,(30),2-4(20),1--3(10),3--4(100)最后一个点无法更新,导致错误),后用取负,加大数法也没过. 现在(寒假了):求负 ...
- *【HDU - 6201】transaction transaction transaction(树形dp 或 spfa最长路 或 网络流)
题干: 题目大意: 给出一棵n个顶点的树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过所需要的花费.现在需要你在树上选择两个点,一个作为买入商品的点,一个作为卖出商品 ...
- HDU4612 Warm up —— 边双联通分量 + 重边 + 缩点 + 树上最长路
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4612 Warm up Time Limit: 10000/5000 MS (Java/Ot ...
- 树的直径,树的最长路dp思想
dp一直弱死了,树型dp很多基本的题都不会,最近在刷树型dp的题,把关于树的最长路的思想总结一下: 树的直径:树中距离最远的两点间的距离. 下面说几道题: hdu 2196:对于树上(双向边)的每一个 ...
- Dijkstra求最长路就是个坑!
如HDU的4502,把题目抽象成一张图,把区间的头-1,这样就可以连接起来了. View Code #include <cstdio> #include <cstring> c ...
- POJ - 3160 Father Christmas flymouse DAG最长路
又来做这一道缩点的裸题,发现图转化为DAG后明显是一个最长路,那么有没有固定都求法呢,查询资料后发现的确是一种固定的做法. DAG最长路,分为两种固定终点和不固定终点. 令dp[i]表示从i顶点出发能 ...
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...
- POJ3160强连通+spfa最长路(不错)
题意: 给你一个有向图,每个点上有一个权值,可正可负,然后给你一些链接关系,让你找到一个起点,从起点开始走,走过的边可以在走,但是拿过权值的点就不能再拿了,问最多能拿到多少权值? 思路: ...
- 算法提高课-图论-单源最短路的建图方式-AcWing 1126. 最小花费:dijkstra求最长路
题目分析 来源:acwing 分析: 链条转移:start * (1-w1) * (1- w2) * (1- w3) -(1-wn) = 100,要start最小,则w =(1-w1) * (1- w ...
最新文章
- 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
- Django连接mysql数据库浅析
- 【iOS】NSNumberFormatter
- Android NDK开发method GetStringUTFChars’could not be resolved
- 160个Crackme026之六段式注册码详解
- 和49支战队瓜分600万奖金,这场史上奖金最多的AI大赛到底比什么?
- TypeError: sequence item 0: expected str instance, int found
- FormatJS – 让你的 Web 应用程序国际化
- 如何删除集合(数组)中指定的元素
- qtableview选中第一行时表头会变色_超新颖的Word目录制作法,包你一看就会!【Word教程】...
- ARM嵌入式系统网络驱动中的重要数据结构
- JAVA-初步认识-第八章-数组工具类中静态的使用
- 【完美解决】arcgis engine 10.0 for cross platform C++ 在visual studio2010上编译的AE程序 的License无法初始化错误。...
- Java Thread.yield详解
- java中equals重写_Java 中equals和toString()方法重写
- Win11如果在桌面右击新建没有文本文档
- eNSP - 华为交换机常用命令
- 掌握这些电脑知识,你可以玩的很无耻
- Springboot毕设项目农村土地资源管理系统g33xzjava+VUE+Mybatis+Maven+Mysql+sprnig)
- KMP算法(字符串匹配)
热门文章
- Matlab:线条动画
- bim机电软件的【快速立管】功能,快速立管
- python微信支付接口_Python微信支付APIv3签名
- 在Unity中实现音口同步-02-Salsa
- 精益生产对成本管理有什么影响?
- 牛人 就是这样锤炼出来的,中兴资深工程师,嵌入式专家韦东山是这样炼成的!
- 独上高楼, 望尽天涯路 . (路在前方)
- [ Hadoop 3.2.1 官方文档 ] Hadoop 开启 Kerberos 安全模式
- RISC-V 能否超越 x86、Arm,成为下一代计算系统根技术的关键?
- MSPFET汉化美化版v1.6.1014(更新官方下载工具MSP Flasher)