zoukankan      html  css  js  c++  java
  • 树上差分

     [USACO15DEC]最大流Max Flow

    时空限制1000ms / 128MB

    题目描述

    Farmer John has installed a new system of N1 pipes to transport milk between the N stalls in his barn (2N50,000), conveniently numbered1N. Each pipe connects a pair of stalls, and all stalls are connected to each-other via paths of pipes.

    FJ is pumping milk between K pairs of stalls (1K100,000). For the iith such pair, you are told two stalls si and ti, endpoints of a path along which milk is being pumped at a unit rate. FJ is concerned that some stalls might end up overwhelmed with all the milk being pumped through them, since a stall can serve as a waypoint along many of the K paths along which milk is being pumped. Please help him determine the maximum amount of milk being pumped through any stall. If milk is being pumped along a path from si to ti, then it counts as being pumped through the endpoint stalls si and

    ti, as well as through every stall along the path between them.

    FJ给他的牛棚的N(2≤N≤50,000)个隔间之间安装了N-1根管道,隔间编号从1到N。所有隔间都被管道连通了。

    FJ有K(1≤K≤100,000)条运输牛奶的路线,第i条路线从隔间si运输到隔间ti。一条运输路线会给它的两个端点处的隔间以及中间途径的所有隔间带来一个单位的运输压力,你需要计算压力最大的隔间的压力是多少。

    输入输出格式

    输入格式:

    The first line of the input contains N and K.

    The next N1 lines each contain two integers x and y (xy) describing a pipe

    between stalls x and y.

    The next K lines each contain two integers s and t describing the endpoint

    stalls of a path through which milk is being pumped.

    输出格式:

    An integer specifying the maximum amount of milk pumped through any stall in the

    barn.

    输入输出样例

    输入样例: 
    5 10
    3 4
    1 5
    4 2
    5 4
    5 4
    5 4
    3 5
    4 3
    4 3
    1 3
    3 5
    5 4
    1 5
    3 4
    输出样例: 
    9

    树上差分裸题,mark一下写法。
    参考博客:
    https://www.cnblogs.com/ice-wing/p/7709311.html
    https://blog.csdn.net/Fine_rose/article/details/77991839
    #include<bits/stdc++.h>
    #define N 60000
    using namespace std;
    
    long long cf[N];
    vector<int>edges[N];
    int grand[N][25]={0};
    int depth[N],DEPTH,n;
    
    void dfs(int x)
    {
        for(int i=1;i<=DEPTH;i++)
        {
            grand[x][i]=grand[grand[x][i-1]][i-1];
        }
    
        for(int i=0;i<edges[x].size();i++)
        {
            int to=edges[x][i];
            if(grand[x][0]==to)continue;
    
            depth[to]=depth[x]+1;
            grand[to][0]=x;
            dfs(to);
        }
    }
    
    void init(int s)
    {
        DEPTH=floor(log(n+ 0.0) / log(2.0));
        depth[s]=1;
        memset(grand,0,sizeof(grand));
        dfs(s);
    }
    
    int lca(int a,int b)
    {
        if(depth[a]>depth[b])swap(a,b);
    
        for(int i=DEPTH;i>=0;i--)
        if(depth[a]<depth[b]&&depth[grand[b][i]]>=depth[a])
        b=grand[b][i];
    
        for(int i=DEPTH;i>=0;i--)
        if(grand[a][i]!=grand[b][i])
        {
            a=grand[a][i];
            b=grand[b][i];
        }
    
        if(a!=b)
        {
            return grand[a][0];
        }
        return a;
    }
    
    long long ans=0;
    
    long long dfs2(int x)
    {
        int Size=edges[x].size();
        for(int i=0;i<Size;i++)
        if(edges[x][i]!=grand[x][0])
        {
            dfs2(edges[x][i]);
            cf[x]+=cf[edges[x][i]];
        }
        
        ans=max(ans,cf[x]);
    }
    
    
    int main()
    {
        int k;
        scanf("%d %d",&n,&k);
        for(int i=0;i<n-1;i++)
        {
            int u,v;
            scanf("%d %d",&u,&v);
            edges[u].push_back(v);
            edges[v].push_back(u);
        }
        
        init(1);
        
        while(k--)
        {
            int u,v;
            scanf("%d %d",&u,&v);
            cf[u]++;
            cf[v]++;
            int t=lca(u,v);
            cf[t]--;
            cf[grand[t][0]]--;
        }
        dfs2(1);
        printf("%lld",ans);
        return 0;
    }
    View Code
    
    
    
     
  • 相关阅读:
    C#带日期型默认值参数的函数
    mvc调用webapi上传图片或文件
    mysql增删改查存储过程
    sql 分页存储过程
    sql 出库存储过程
    Ternura
    留言板
    友链
    .net 死锁
    C#微信小程序搜索框
  • 原文地址:https://www.cnblogs.com/tian-luo/p/9623754.html
Copyright © 2011-2022 走看看