正题


题目大意

一棵树
若干条路径,哪个点经过的路径最多,求路径条数。


解题思路

对于每条路径计算一次LCALCALCA,然后树上差分就好了。


codecodecode

#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
const int N=50010;
struct node{int to,next;
}a[N*2];
int tot,ls[N],dep[N],f[N][20],c[N];
int y,n,k,t,ans;
queue<int> q;
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void bfs()
{t=(int)(log(n)/log(2))+1;q.push(1);dep[1]=1;while(!q.empty()){int x=q.front();q.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[y]) continue;dep[y]=dep[x]+1;f[y][0]=x;q.push(y);}}for(int j=1;j<=t;j++)for(int i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1];
}
int LCA(int x,int y)
{if(dep[x]>dep[y]) swap(x,y);for(int i=t;i>=0;i--)if(dep[f[y][i]]>=dep[x])y=f[y][i];if(x==y) return x;for(int i=t;i>=0;i--)if(f[y][i]!=f[x][i]){y=f[y][i];x=f[x][i];}return f[x][0];
}
void get_ans(int x)
{for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[x]+1!=dep[y]) continue;get_ans(y);c[x]+=c[y];}ans=max(ans,c[x]);
}
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}bfs();for(int i=1;i<=k;i++){int s,e,lca;scanf("%d%d",&s,&e);lca=LCA(s,e);c[s]++;c[e]++;c[lca]--;c[f[lca][0]]--;}get_ans(1);printf("%d",ans);
}

P3128-最大流Max Flow【树上差分,LCA】相关推荐

  1. P3128 [USACO15DEC]最大流Max Flow

    P3128 [USACO15DEC]最大流Max Flow 对,这是一道最大流的题目qwq 树上跑最大流,没错 也就是跑最小割 你看名字里都有最大流,为什么不能跑最大流qwq............. ...

  2. [LUOGU] P3128 [USACO15DEC]最大流Max Flow

    题意:一棵树,多次给指定链上的节点加1,问最大节点权值 n个点,n-1条边很容易惯性想成一条链,幸好有样例.. 简单的树剖即可!(划去) 正常思路是树上差分,毕竟它就询问一次.. #include&l ...

  3. 洛谷 P3128 [USACO15DEC]最大流Max Flow

    题意简述 给定一颗树,每次操作可以使两个点最短路上的点+1,求最大的点 题解思路 树上差分 若操作u, v,则++f[u], ++f[v], --f[lca(u, v)], --f[father(lc ...

  4. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 1388  Solved: 860 [Submit][Stat ...

  5. Distance on the tree(树上倍增+主席树+树上差分+lca)南昌网络赛

    题目链接:南昌邀请赛网络赛Distance on the tree 统计一条链上边权小于k的边数. 树上差分,对于边权来说,一条链上的边的条数=sum[x]+sum[y]-2*sum[lca(x,y) ...

  6. 【USACO15DEC】最大流Max Flow

    题面 FJ给他的牛棚的N(2≤N≤50,000)个隔间之间安装了N-1根管道,隔间编号从1到N.所有隔间都被管道连通了. FJ有K(1≤K≤100,000)条运输牛奶的路线,第i条路线从隔间si运输到 ...

  7. P2680 运输计划(树上差分+lca+二分)

    题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间 ...

  8. 通俗讲解Ford-Fulkerson算法求最大流Max Flow

    什么是流网络 流网络是一种特殊的单向有权连通图.有且只有一个源点和汇点,权重作为容量. 图中a点是源点,也就是起点,一般记作s,f是汇点,也就是终点,一般记作t. 通过以上流网络衍生出来的,满足每条边 ...

  9. 【2022寒假基础集训】第二场 - G.小沙的身法【树上差分+LCA】

    Date:2022.04.28 题目描述 小沙发现他打球打不赢别人,打架也打不赢别人,所以他去了少林寺学习身法,以求打球的时候可以跑的更快,打架的时候也可以跑的更快(bushi). 少林寺的方丈告诉小 ...

最新文章

  1. Apache服务器下使用 ab 命令进行压力测试
  2. 源代码管理的新15条建议
  3. Boost.Signals2 的初学者你好世界示例
  4. 文件内容批量修改工具
  5. 安装apex报错解决
  6. spring学习(4):spring管理对象之间的关联关系
  7. 学习 python logging(1): 基本用法
  8. 纯CSS实现的蓝色竖向导航代码
  9. Windows环境上装在VM,VM安装CentOS7
  10. tika获取压缩文件内容
  11. python读取二进制文件_python中读写二进制文件
  12. 中柏平板电脑刷linux,中柏平板电脑系统下载与安装教程
  13. linux man手册更新,linux man手册介绍【manual】
  14. java 打开scv 文件_JAVA读写CSV文件
  15. 珍大户《认知世界的经济学》学习笔记 -- 第21课 利率的计算 更新时间2021年07月27日22:14:34
  16. docker迁移禅道
  17. Android 设备在Play Store无法搜索下载Netflix软件
  18. 使用 Shiro 配合微信小程序或者app登录,做验权
  19. 软考中级 真题 2018年下半年 系统集成项目管理工程师 基础知识 上午试卷
  20. 苹果7p最佳系统版本_苹果代码中发现, iPhone12 刘海没了!

热门文章

  1. 每天的0点php,使用strtotime,这个月的第一天凌晨0点在PHP?(Using just strtotime, 0 am first day of this month in PHP?)...
  2. c语言配电自动化,我是电气工程及其自动化专业的要学C语言吗?
  3. linux删除第二次出现的字符,linux下 怎样删除文件名中包含特殊字符的文件
  4. 2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程
  5. leetcode1005. K 次取反后最大化的数组和
  6. [Java基础]类加载
  7. [蓝桥杯][2014年第五届真题]兰顿蚂蚁-模拟
  8. [蓝桥杯]错误票据---stringstream应用举例
  9. AcWing 3195. 有趣的数
  10. java蝇量模式_Head First设计模式——蝇量和解释器模式