• POJ


    题意:给定一个N个节点的树,1<=N<=50000 每个节点都有一个权值,代表商品在这个节点的价格。商人从某个节点a移动到节点b,且只能购买并出售一次商品,问最多可以产生多大的利润。

    思路:路径压缩,得到每个点到当前根的信息,然后更新即可。 有可以用倍增做。

    很久前抄的代码。

    #include<cstdio>
    #define min(a,b) (a<b?a:b)
    #define max(a,b) (a>b?a:b)
    #define swap(a,b) (a^=b,b^=a,a^=b)
    using namespace std;
    const int mm=333333;
    const int mn=55555;
    int s[mm],t[mm],d[mm],p[mm],ans[mm];
    int h[mn]={0},q[mn]={0},g[mn]={0},f[mn],mx[mn],mi[mn],up[mn]={0},dw[mn]={0};
    bool vis[mn]={0};
    int i,j,k,n,m,e;
    inline void add(int u,int v,int c,int h[])
    {
        s[e]=u,t[e]=v,d[e]=c,p[e]=h[u],h[u]=e++;
        s[e]=v,t[e]=u,d[e]=-c,p[e]=h[v],h[v]=e++;
    }
    int find(int x)
    {
        if(f[x]==x)return x;
        int y=f[x];
        f[x]=find(f[x]);
        up[x]=max(mx[y]-mi[x],max(up[x],up[y]));
        dw[x]=max(mx[x]-mi[y],max(dw[x],dw[y]));
        mx[x]=max(mx[x],mx[y]);
        mi[x]=min(mi[x],mi[y]);
        return f[x];
    }
    void tarjan(int u)
    {
        int i,v,x,y;
        vis[f[u]=u]=1;
        for(i=q[u];i;i=p[i])
            if(vis[v=t[i]])
                v=find(v),t[e]=i,p[e]=g[v],g[v]=e++;
        for(i=h[u];i;i=p[i])
            if(!vis[v=t[i]])tarjan(v),f[v]=u;
        for(i=g[u];i;i=p[i])
        {
            v=t[i],x=s[v],y=t[v],find(x);
            if(d[v]<0)swap(x,y),v=-d[v];
            else v=d[v];
            ans[v]=max(mx[y]-mi[x],max(up[x],dw[y]));
        }
    }
    inline void get(int &a)
    {
        char c;
        while((c=getchar())<'0'||c>'9');
        for(a=0;c>='0'&&c<='9';c=getchar())a=a*10+c-'0';
    }
    void out(int x)
    {
        if(x>9)out(x/10);
        putchar(x%10+'0');
    }
    int main()
    {
        for(get(n),i=1; i<=n; ++i)get(mx[i]),mi[i]=mx[i];
        for(e=k=1; k<n; ++k)get(i),get(j),add(i,j,0,h);
        for(get(m),k=1; k<=m; ++k)get(i),get(j),add(i,j,k,q);
        tarjan(1);
        for(i=1; i<=m; ++i)out(ans[i]),puts("");
        return 0;
    }
  • 相关阅读:
    公司官网ucenter搬家注意问题
    PHP中获取CHECKBOX提交的内容及checkbox全选
    js注册验证
    c# 相对路径的一些文献
    C# 读取xml中的配置信息,并加入到combobox或者其他中(winform)
    java 路径问题,防止再忘掉
    Mastering the Java CLASSPATH
    ps 制作背景透明 图片
    c# 双缓冲 技术与例子
    一些经验记录,主要是C# ToString()和 DateTime 之类的
  • 原文地址:https://www.cnblogs.com/hua-dong/p/11237141.html
Copyright © 2020-2023  润新知