最优贸易
Posted ainiyuling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最优贸易相关的知识,希望对你有一定的参考价值。
状态f[x]的含义如下:走到第x个节点为止最多赚的旅费。
方程如下:f[x]=max(f[prev],c[x]−minx)
最终输出的是:走到第N个节点为止最大旅费,即f[n]。
#include<bits/stdc++.h> #define INF 0x7f7f7f7f #define MAXN 100005 using namespace std; vector<int> g[MAXN]; int n,m,f[MAXN],mi[MAXN],c[MAXN]; void dfs(int x,int minx,int pre) int flag=1; minx=min(c[x],minx); if (mi[x]>minx) mi[x]=minx,flag=0; int maxx=max(f[pre],c[x]-minx); if (f[x]<maxx) f[x]=maxx,flag=0; if (flag) return; for (int i=0;i<g[x].size();i++) dfs(g[x][i],minx,x); int main() scanf("%d%d",&n,&m); for (int i=0;i<MAXN;i++) mi[i]=INF; for (int i=1;i<=n;i++) scanf("%d",&c[i]); for (int i=1;i<=m;i++) int t1,t2,t3; scanf("%d%d%d",&t1,&t2,&t3); g[t1].push_back(t2); if (t3==2) g[t2].push_back(t1); dfs(1,INF,0); printf("%d\n",f[n]); return 0;
以上是关于最优贸易的主要内容,如果未能解决你的问题,请参考以下文章