• NOIP2009(codevs1173)最优贸易


    题目大意:给你一张有n个点m条边的有向图,每个点有一个权值,求一条1到n的路径,使得这条路径上存在两个点且他们的权值差最大。

    思路:用dis[i]]记录从1到i的路径中所能得到两点间权值差的最大值,然后用spfa或dijkstra来求dis数组的最大值

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<queue>
    const int MAXN=200007; 
    using namespace std;
    queue<int> q;
    int head[MAXN],nextt[MAXN],dis[MAXN],tot,e[2000077],buy[MAXN];
    int vis[MAXN];
    template<class T>void read(T &x)
    {
        x=0;int f=0;char ch=getchar();
        while(ch<'0'||ch>'9')  {f|=(ch=='-');ch=getchar();}
        while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
        x=f?-x:x;
    }
    void add(int u,int v)
    {
        e[++tot]=v;
        nextt[tot]=head[u];
        head[u]=tot;
    }
    int main()
    {
        int x,y,z,m,n;
        memset(dis,-1,sizeof(dis));
        read(n),read(m);
        for(int i=1;i<=n;++i)
          read(buy[i]);
        for(int i=1;i<=m;++i)
        {
            read(x),read(y),read(z);
            add(x,y);
            if(z==2) add(y,x);
        }
        q.push(1);
        while(!q.empty())
        {
            int x=q.front();q.pop();
            vis[x]=233;
            for(int i=head[x];i;i=nextt[i])
            {
                int y=e[i];
                if(dis[y]==-1||dis[y]<buy[y]-buy[x])
                {
                    vis[y]=0;
                    if(buy[y]-buy[x]>0) dis[y]=buy[y]-buy[x];
                }
                if(dis[y]<dis[x])
                {
                    vis[y]=0;
                    if(dis[x]>dis[y]) dis[y]=dis[x];
                }
                if(vis[y]==0)
                {
                    vis[y]=1;
                    q.push(y);
                }
            }
        }
        if(dis[n]==-1) printf("0");
        else            printf("%d",dis[n]);
        return 0;
    }
  • 相关阅读:
    关于浏览器及系统的判断
    toggle与slideToggle
    安卓与ios的不同处理
    关于常用循环遍历获取数据
    docker
    Mysql
    rabbitMQ的使用转载
    Git命令行
    vue项目创建完整版
    redis操作(str.hash.list.set)
  • 原文地址:https://www.cnblogs.com/Peper/p/8994138.html
Copyright © 2020-2023  润新知