HDU 6201 transaction transaction transaction (最长路)
来源:互联网 发布:一个简单的python程序 编辑:程序博客网 时间:2024/05/22 10:55
题意:给你n个点的一棵树,每个点有一个买书或者卖书的费用w,树的边也有花费,求从一个点买书到另一个点卖书得到差价的最大值。
分析:引入源点和汇点,就像一条河流,源点到每个点的权值都为该城市的书价,每个点到汇点的权值都为负的该城市的书价,对应买入和卖出,中间的花费也都为负,所以求源点到汇点的最长路就可以了,像是网络流。
代码:
#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <algorithm>using namespace std;const int maxn = 100000 + 10;int n;int a[maxn];int d[maxn];struct node{ int u,v,d; node(int u1=0,int v1=0,int d1=0):u(u1),v(v1),d(d1){} };vector<node>edges;vector<int>g[maxn];void add(int u,int v,int w){ edges.push_back(node(u,v,w)); g[u].push_back((int)edges.size()-1);}bool vis[maxn]; int cnt[maxn];queue<int>q;void spfa(){ memset(vis,0,sizeof(vis)); memset(cnt,0,sizeof(cnt)); while(!q.empty()){ q.pop(); } vis[0]=1; cnt[0]=1; memset(d,0,sizeof(d)); q.push(0); while(!q.empty()){ int u=q.front();q.pop(); vis[u]=0; for(int i=0;i<g[u].size();i++){ int id=g[u][i]; int v=edges[id].v; int w=edges[id].d; if(d[v] < d[u] + w){ d[v] = d[u] + w; if(!vis[v]){ vis[v]=1; cnt[v]++; q.push(v); if(cnt[v] > n) return; } } } } printf("%d\n",d[n+1]);}int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d",&n); edges.clear(); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); g[i].clear(); } for(int i=1;i<=n;i++){ add(0,i,a[i]); add(i,n+1,-a[i]); } for(int i=1;i<n;i++){ int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,-w); add(v,u,-w); } spfa(); } return 0;}
阅读全文
0 0
- Hdu 6201 transaction transaction transaction【最长路】
- hdu 6201 transaction transaction transaction(最长路)
- HDU 6201 transaction transaction transaction (最长路)
- Hdu 6201 transaction transaction transaction(最长路)
- HDU 6201 transaction transaction transaction【树形DP||SPFA最长路】
- hdu 6201 transaction transaction transaction (spfa求最长路)
- HDU-6201 transaction transaction transaction(树dp / 最长(短)路)
- hdu 6201transaction transaction transaction
- HDU 6201 transaction transaction transaction
- hdu 6201 transaction transaction transaction
- HDU 6201 transaction transaction transaction
- hdu-6201 transaction transaction transaction
- hdu 6201 transaction transaction transaction
- transaction transaction transaction HDU
- transaction transaction transaction HDU
- hdu6201-搜索|最长路-transaction transaction transaction
- HDU 6201 transaction transaction transaction(SPFA算法求最长路径)
- HDU 6201 transaction transaction transaction(树上dfs/费用流)
- TB级大表秒级任意维度分析
- hdu 6199 gems gems gems dp
- alias环境配置续集
- C++类和对象知识点整理六-----多继承
- App开发模式
- HDU 6201 transaction transaction transaction (最长路)
- 【新版】Android技术博客精华汇总
- 通过IP准确高度的定位到小区,街道
- c++ 拆分字符串
- div获取焦点
- window.showModalDialog弹出悬浮框
- 【ORACLE】安装时遇到“display at least 256 colors”
- 安装Maven插件
- BZOJ 1071 组队 详解(单调队列)