码迷,mamicode.com
首页 > 其他好文 > 详细

最优贸易

时间:2019-09-25 00:51:58      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:flag   targe   tar   tps   main   def   输出   节点   size   

题面

状态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;
}

  

最优贸易

标签:flag   targe   tar   tps   main   def   输出   节点   size   

原文地址:https://www.cnblogs.com/ainiyuling/p/11581881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!