HDU
来源:互联网 发布:python中的不可变类型 编辑:程序博客网 时间:2024/06/08 10:07
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201
题目大意:选2个城市,一个买书,一个卖书,只买一本,问最多赚多少钱
解题思路:直接跑一遍Dfs,思路写在代码里(最终解一定是一个书价小的点经过若干条边到达一个书价大的点)
AC代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int Inf = 0x3f3f3f3f;const int MAXN = 100000+5;struct Edge{ int _v, _val, _next; Edge(int v = 0, int val = 0, int next = 0) :_v(v), _val(val), _next(next) {}}edge[MAXN<<1];int gt[MAXN], head[MAXN], edgnum;LL ans;void toInit(){ edgnum = 0; memset(head, -1, sizeof(head)); ans = 0;}void toAdd(int u, int v, int val){ edge[edgnum] = Edge(v, val, head[u]); head[u] = edgnum++;}void Dfs(int fa,int u,LL val,int flag)//flag=0表示fa到u的书价格增大,=1表示书价格减小,val记录之前赚的钱{ ans = max(val, ans); for (int i = head[u];i != -1;i = edge[i]._next) { int v = edge[i]._v; if (v == fa) continue; if (gt[v] > gt[u]) { int tmp = gt[v] - gt[u] - edge[i]._val; if (tmp < 0)//如果这两个点买书卖书亏的话,那么舍弃这两个点 Dfs(u, v, 0, 0); else { if (flag == 1) Dfs(u, v, tmp, 0);//如果跟之前的flag相反的话,那么舍弃之前的,以这两个点重新开始记录 else Dfs(u, v, val + tmp, 0);//如果flag相同,那么可以叠加 } } else//同理 { int tmp = gt[u] - gt[v] - edge[i]._val; if (tmp < 0) Dfs(u, v, 0, 0); else { if (flag == 0) Dfs(u, v, tmp, 1); else Dfs(u, v, val + tmp, 1); } } }}int main(){ int t;scanf("%d", &t); while (t--) { toInit(); int n;scanf("%d", &n); int rt,minn=Inf; for (int i = 1;i <= n;++i) { scanf("%d", gt + i); if (gt[i] < minn) rt = i, minn = gt[i]; } for (int i = 1;i <= n - 1;++i) { int u, v, val; scanf("%d%d%d", &u, &v, &val); toAdd(u, v, val); toAdd(v, u, val); } Dfs(rt, rt, 0, 0); printf("%I64d\n", ans); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- nginx-配置网络监听
- 一、操作系统基础知识
- linux 虚拟机模拟配置网络路由环境-简版
- [CSU 2005 Nearest Maintenance Point Submit Page] Dijkstra
- mysql server5.7 找不到my.ini,只有my-default.ini
- HDU
- Java核心技术 ( 卷 I ) 读书笔记(第一~三章)
- qt编译加速
- 2017上半年技术文章集合—184篇文章分类汇总
- HDU 6195 cable cable cable (找规律) 2017ACM沈阳赛区网络赛
- 抽奖点名
- [新手编程训练项目]004——C语言文件夹文件信息输出001:io库中_finddata_t结构体的使用
- POJ 1477
- 模电学习八大概念,工程师必看