其它综合

[USACO15DEC]最大流MaxFlow

我爱IT资讯库   2021/02/26

题目:洛谷p3128。

题目大意:一棵n个点的树,每次将两个节点最短路径所覆盖的所有节点的流量加1。问你最后流量最大的节点的流量是多少。

解题思路:裸的树上差分。

对于每次增加流量,我们把两个节点的流量+1,它们的lca和lca的父亲的流量-1。

最后求一遍子树和,求出来每个节点的子树和就是该节点实际流量。

最后求最大值即可。

时间复杂度:树剖、倍增lca $o(m\log_2 n)$,tarjan lca $o(n+m)$。

我采用tarjan算法,288ms。

c++ code:

#includelt;cstdiogt;
#includelt;cstringgt;
#includelt;vectorgt;
#includelt;cctypegt;
#define n 50005
using namespace std;
int n,m,ne=0,nq=0;
bool vis[n],instack[n];
int f[n],head[n],que[n],a[n],zx[n];
#define c c=getchar()
inline int readint(){
    char c;
    bool b=false;
    while(!isdigit(c))b=c==‘-‘,c;
    int d=0;
    while(isdigit(c)){
        d=d*10+c-‘0‘;
        c;
    }
    return (b)(-d):d;
}
struct query{
    int same,nxt,to,num;
    bool flag;
}q[nlt;lt;5];
struct edge{
    int to,nxt;
}e[nlt;lt;5];
void add_edge(int x,int y){
    e[++ne].to=y;
    e[ne].nxt=head[x];
    head[x]=ne;
    e[++ne].to=x;
    e[ne].nxt=head[y];
    head[y]=ne;
}
void add_que(int x,int y,int z){
    q[++nq].to=y;
    q[nq].same=nq+1;
    q[nq].num=z;
    q[nq].nxt=que[x];
    que[x]=nq;
    q[++nq].to=x;
    q[nq].same=nq-1;
    q[nq].num=z;
    q[nq].nxt=que[y];
    que[y]=nq;
}
int find(int x){
    if(f[x]==x)return x;
    return f[x]=find(f[x]);
}
void tarjan(int root){
    instack[root]=true;
    for(int i=head[root];i;i=e[i].nxt){
        int v=e[i].to;
        if(instack[v])continue;
        tarjan(v);
        f[v]=root;
        vis[v]=true;
    }
    for(int i=que[root];i;i=q[i].nxt)
    if(vis[q[i].to]amp;amp;!q[i].flag){
    	int p=find(q[i].to);
        --a[p];
        --a[zx[p]];
        q[i].flag=q[q[i].same].flag=true;

    }
    instack[root]=false;
}
void dfs(int now){
    instack[now]=true;
    for(int i=head[now];i;i=e[i].nxt)
    if(!instack[e[i].to]){
        dfs(e[i].to);
        a[now]+=a[e[i].to];
    }
}
void dfs2(int now){
    instack[now]=true;
    for(int i=head[now];i;i=e[i].nxt)
    if(!instack[e[i].to]){
        zx[e[i].to]=now;
        dfs2(e[i].to);
    }
}
int main(){
    n=readint(),m=readint();
    memset(vis,0,sizeof(vis));
    memset(instack,0,sizeof instack);
    for(int i=1;ilt;=n;i++)f[i]=i;
    for(int i=1;ilt;n;i++){
        int u=readint(),v=readint();
        add_edge(u,v);
    }
    memset(a,0,sizeof a);
    zx[1]=0;
    dfs2(1);
    memset(instack,0,sizeof instack);
    for(int i=1;ilt;=m;i++){
        int x=readint(),y=readint();
        ++a[x];
        ++a[y];
        if(x!=y)
        add_que(x,y,i);else
        --a[x],--a[zx[x]];
    }
    tarjan(1);
    memset(instack,0,sizeof instack);
    dfs(1);
    int max=0;
    for(int i=1;ilt;=n;i++)
    if(maxlt;a[i])max=a[i];
    printf("%d\n",max);
    return 0;
}

[usaco15dec]最大流max flow

原文地址:http://www.cnblogs.com/mrsrz/p/7782987.html




热门内容

kde4.1 alpha1

KDE Project Ships First Alpha of KDE 4.1 KDE Commun... ...

oracle 函数 和 优化

sql语句中,如果where条件里面含有not, !=, <> ,null ,则即使该字段建有索引,也... ...
09年中国互联网企业市值排名

09年中国互联网企业市值排名

这是一个最坏的时代,也是一个最好的时代。自07年底美国次贷危机以来,全球经济发生了巨大的变化。股票市场也随之跌荡起... ...

用于发送UDP消息的SQL Server 扩展存储过程

下载源文件 13.1 kb介绍我希望能够发布 sql server 表更新,因此修改了微软的示例扩展存储过程 xp_he ...

Cache与Fetch(二)

这两天一直百思不得其解的问题终于解决了,这个问题如下: 通过HQL:“select distinct forumGr... ...

[转]小规模低性能低流量网站设计原则

作者: Fenng 网址: http://www.dbanotes.net/arch/small_site... ...

divcss圆角

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit... ...

Kindle Paperwhite 越狱/加字体/支持PDF、EPUB、DjVu、FB2、CHM和DOC文档

0. 升级 官网固件升级:http://www.amazon.com/gp/help/customer/displ... ...
购物网第二阶段总结笔记3:用户注册模块

购物网第二阶段总结笔记3:用户注册模块

事先工作: 【1】建立用户表:  分析静态页面的用户信息,可以得出用户表所需的字段,建立用户表S... ...

pythonbottleweb框架简介

bottle 是一个快速,简单,轻量级的 python wsgi web 框架。单一文件,只依赖 python 标准库 ...

Android Log介绍

android.util.Log常用的方法有以下5个:Log.v() ,Log.d() ,Log.i() ,Log.w(... ...

target action版简化命令设计模式原理分析

我们知道在Cocoa程序中, 如果你想处理一个窗口的事件或者应用程序的事件, 你可以使用Delegate的方法来实现响应... ...

AHP层次分析法计算权重

一. AHP层次分析法介绍     层次分析法(Analytic Hierarchy... ...

AddingGravitytoyourUIComponents

problem you want your ui components to have gravity, so that ...

我的tmux配置

# General Setting set-option -g prefix C-a ... ...

Android适配器之---SimpleCursorAdapter

结构 继承关系 public class SimpleCusrorAdapter extends Reso... ...

008.不要在该奋斗的年纪选择去偷懒

转载地址:不要在该奋斗的年纪选择去偷懒 不要在该奋斗的年纪选择去偷懒,只有度过了一段连自己都被感动了的... ...

不能读取记录;在MSysObjects上没有读取数据权限-80040E09

当我读取ACCESS里的系统表MSysObjects时,出现:不能读取记录;在 MSysObjects 上没有读取... ...

[Django]bulk_create探究

使用django orm大批量插入的时候我们可以不使用for循环对一个一个的save而是使用 bulk_create ...

不均衡分区和绑定变量窥视导致的查询计划错误

不均衡分区和绑定变量窥视导致的查询计划错误 周一收到生成支持人员的报告,系统上一个作业启动后很长时间没有完成,其执... ...

SQLCookbook学习笔记

许多人以一种马马虎虎的态度在使用sql,根本没有意识到自己掌握着多么强大的武器。本书的目的是打开读者的视野,看看sql究 ...

Android ImageView长按保存图片及截屏相关知识

在日常开发中,可能会需要做长按保存图片这个功能,又或者需要做个截屏分享功能。最近正好在研究这些东... ...

Ruby中的block代码块学习教程

1、什么是代码块 在Ruby中,{}或do...end之间的代码是一个代码块。代码块只能出现在一个方法的后边,它紧接在方... ...

C#方法重载(overload)方法重写(override)隐藏(new)

一、重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同... ...
用Far制作chm的简易教程

用Far制作chm的简易教程

不可否认QuickCHM是做chm电子书最简洁有效的软件了。但自从去年某次用QuickCHM做电子书的时候碰到了莫名其妙... ...

国内城市翻译

INSERT INTO `dictionary` (chinese, english) VALUES ('上海',... ...

(PHP 4, PHP 5) isset — 检测变量是否设置

说明 bool isset    ( mixed $var   [, mi... ...

在 sources.list 从 命令行,恢复默认apt存储库

问题:我正在寻找从 命令行 中恢复 /etc/apt/sources.list的最佳方法。无法引用生成这里文件的包的源代 ...
使用FastReport Studio开发报表(二)

使用FastReport Studio开发报表(二)

二、在开发环境的代码中使用 在C#中新建一个WinForm项目,并在工具栏中引用FastReport Studio的... ...

【笔记】javascript权威指南-第二章-词法结构

词法结构 //本书是指:javascript权威指南    ... ...