HDU 6201 源点和汇点
来源:互联网 发布:c语言求最大公因数函数 编辑:程序博客网 时间:2024/05/17 03:09
转载于:http://blog.csdn.net/a15110103117/article/details/77925858
transaction transaction transaction
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)
Total Submission(s): 284 Accepted Submission(s): 125
Problem Description
Kelukin is a businessman. Every day, he travels around cities to do some business. On August 17th, in memory of a great man, citizens will read a book named "the Man Who Changed China". Of course, Kelukin wouldn't miss this chance to make money, but he doesn't have this book. So he has to choose two city to buy and sell.
As we know, the price of this book was different in each city. It is ai yuan in it city. Kelukin will take taxi, whose price is 1yuan per km and this fare cannot be ignored.
There are n−1 roads connecting n cities. Kelukin can choose any city to start his travel. He want to know the maximum money he can get.
Input
The first line contains an integer T (1≤T≤10) , the number of test cases.
For each test case:
first line contains an integer n (2≤n≤100000) means the number of cities;
second line contains n numbers, the ith number means the prices in ith city; (1≤Price≤10000)
then follows n−1 lines, each contains three numbers x, y and z which means there exists a road between x and y, the distance is zkm (1≤z≤1000).
Output
For each test case, output a single number in a line: the maximum money he can get.
Sample Input
1
4
10 40 15 30
1 2 30
1 3 2
3 4 10
Sample Output
8
Source
2017 ACM/ICPC Asia Regional Shenyang Online
Recommend
liuyiding
题意:
给出一棵树,每个点都有点权,问取两个点,使得T-S-sumw为最大(T为终点的点权,S为起点的点权,sumw为S到T的路径长度),可取相同的点。
思路:
正解应该是树dp,想看树dp的请到隔壁,我蒟蒻并不会,网络赛上是队友敲的。我这里给出另外一种解法,思路来自ACM贴吧群dalao。
求最短路(我跑的是最长路),你加个源点,汇点,源点到树上的点边权为ci,树上点到汇点边权为-ci,ci为该点点权,树上点与点之间边权也取反,转化一下也可以跑最短。
费用流也可做的样子?
代码:
#include <stdio.h>#include <algorithm>#include <queue>#include <string.h>using namespace std;struct jj{ int v,c,next;}w[400000];int a[100001],h[100002],numw;void insert(int u,int v,int c){ w[numw].v=v; w[numw].c=c; w[numw].next=h[u]; h[u]=numw++;}int spfa(int s,int t){ int i,dis[100002],v[100002]; queue<int>q; memset(dis,0,sizeof(dis)); memset(v,0,sizeof(v)); q.push(s); while(q.empty()==0) { s=q.front(); q.pop(); v[s]=0; for(i=h[s];i!=-1;i=w[i].next) { if(dis[w[i].v]<dis[s]+w[i].c) { dis[w[i].v]=dis[s]+w[i].c; if(v[w[i].v]==0) { v[w[i].v]=1; q.push(w[i].v); } } } } return dis[t];}int main(){ int t,n,i,u,v,c; scanf("%d",&t); while(t--) { memset(h,-1,sizeof(h)); numw=0; scanf("%d",&n); for(i=1;n>=i;i++) { scanf("%d",&a[i]); insert(0,i,a[i]); //实际上我把它当汇点了 insert(i,n+1,-a[i]); //那么这个就是源点 } for(i=1;n>i;i++) { scanf("%d %d %d",&u,&v,&c); insert(u,v,-c); //题目中跑路所要的花费 insert(v,u,-c); } printf("%d\n",spfa(0,n+1)); } return 0;}
阅读全文
0 0
- HDU 6201 源点和汇点
- 源点和汇点
- hdu 2066 一个人的旅行 spfa + 建超级源点汇点
- 《网络流学习笔记04 && NYOJ 489 哭泣天使(建边,超级源点和汇点)》
- ZJU2314(Reactor Cooling)求没有源点和汇点的流量有上下界的可行流
- poj 1459 超级源点超级汇点EK最大流
- POJ 1459 Power Network (多源点/汇点最大流问题)
- uva10330 (最大流 & 超级源点汇点的构建 & EK算法)
- poj1459——Power Network(网络流,超级源点、汇点)
- poj1087——A Plug for UNIX(网络流,超级源点、汇点)
- HDU 2066 一个人的旅行 超级源点
- DP---源点到目的点经过最多的1点
- HDU 1535 Invitation Cards(多源点到单源点,dijkstra/spfa)
- HDU 2923 Einbahnstrasse(最短路径,多源点到单源点)
- BFS从源点到目的点的距离
- HDU 2680 Choose the best route 多源点+一汇点求最短路
- hdu 2066 一个人的旅行(加超级源点)
- HDU 2680 Choose the best route多源点最短路
- IO流 2
- django 静态文件的配置说明
- JavaScript中数组的那些方法
- fmbt with ruby support
- 承前启后
- HDU 6201 源点和汇点
- 卡特兰数
- JSP中页面的转发与重定向
- 关于解决NX重置之后“试图使用不活动的对象”
- IO流 3
- XML文件在Eclipse中报黄色警号No grammar constraints (DTD or XML Schema) referenced in the document.
- JavaScript中的立即执行函数
- Noip 2015 子串(洛谷P2679)
- 射击(递归)