loj #10131
抽离题意
求删除一条树边和一条非树边后将图分成不连通的两部分的方案数
对于一棵树,再加入一条边就会产生环。若只有一个环,说明只加入了一条非树边 (x, y),记 lca 为 l, 那么
对于任意一条 (x, l) and (y, l) 上的树边,都会产生 1 的贡献,也就是说若一条树边可以产生 1 的贡献,
那么该边必须只存在于一个环中,这样的话,对于每条非树边,在树上 (x, l) and (y, l) 的边 +1,这样找出
权值为 1 的边,对答案的贡献为 1 ,当然如果某条边不存在于任意环,那么它的贡献为 m。
树上差分即可
#include <bits/stdc++.h>
const int N = 1e5 + 10;
std:: vector <int> Vec[N];
int n, m;
int f[N][27];
int deep[N];
void Dfs(int u, int f_, int dep) {
int S = Vec[u].size();
deep[u] = dep;
for(int i = 0; i < S; i ++) {
int v = Vec[u][i];
if(v == f_) continue;
f[v][0] = u;
Dfs(v, u, dep + 1);
}
}
void Pre() {
for(int j = 1; j <= 25; j ++)
for(int i = 1; i <= n; i ++)
f[i][j] = f[f[i][j - 1]][j - 1];
}
inline int Lca(int x, int y) {
if(deep[x] < deep[y]) std:: swap(x, y);
int del = deep[x] - deep[y];
for(int i = 0; (1 << i) <= del; i ++) if(del & (1 << i)) x = f[x][i];
if(x == y) return x;
for(int i = 24; i >= 0; i --) if(f[x][i] != f[y][i]) x = f[x][i], y = f[y][i];
return f[x][0];
}
int Cnt[N];
void Dfs_ans(int u, int f_) {
int S = Vec[u].size();
for(int i = 0; i < S; i ++) {
int v = Vec[u][i];
if(v == f_) continue;
Dfs_ans(v, u);
Cnt[u] += Cnt[v];
}
}
int main() {
std:: cin >> n >> m;
for(int i = 1; i < n; i ++) {
int u, v; std:: cin >> u >> v;
Vec[u].push_back(v), Vec[v].push_back(u);
}
Dfs(1, 0, 1);
Pre();
for(int i = 1; i <= m; i ++) {
int x, y;
std:: cin >> x >> y;
Cnt[x] ++, Cnt[y] ++, Cnt[Lca(x, y)] -= 2;
}
Dfs_ans(1, 0);
int Answer = 0;
for(int i = 2; i <= n; i ++) {
if(Cnt[i] == 0) Answer += m;
else if(Cnt[i] == 1) Answer ++;
}
std:: cout << Answer;
return 0;
}
loj #10131的更多相关文章
- LOJ #10131 「一本通 4.4 例 2」暗的连锁
LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...
- 【LOJ#10131】暗的锁链
题目大意:给定一个 N 个点无向图的一棵生成树和另外 M 条边,第一次去掉生成树中的一条边,第二次去掉另外 M 条边中的一条边,求有多少种情况可以使得给定的无向图不连通. 题解:首先考虑该生成树,若新 ...
- uva 10131 Is Bigger Smarter?(DAG最长路)
题目连接:10131 - Is Bigger Smarter? 题目大意:给出n只大象的属性, 包括重量w, 智商s, 现在要求找到一个连续的序列, 要求每只大象的重量比前一只的大, 智商却要小, 输 ...
- Uva 10131 Is Bigger Smarter? (LIS,打印路径)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=1072">链接:UVa 10131 题意: ...
- [Noi2016]区间 BZOJ4653 洛谷P1712 Loj#2086
额... 首先,看到这道题,第一想法就是二分答案+线段树... 兴高采烈的认为我一定能AC,之后发现n是500000... nlog^2=80%,亲测可过... 由于答案是求满足题意的最大长度-最小长 ...
- Loj #2192. 「SHOI2014」概率充电器
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
随机推荐
- Sql CLR创建一个简单的表值函数
1.创建面目: 2. 添加函数代码: using System; using System.Data.Sql; using Microsoft.SqlServer.Server; using Syst ...
- 使用交叉验证法(Cross Validation)进行模型评估
scikit-learn中默认使用的交叉验证法是K折叠交叉验证法(K-fold cross validation):它将数据集拆分成k个部分,再用k个数据集对模型进行训练和评分. 1.K折叠交叉验证法 ...
- springboot activiti 工作流版本 集成代码生成器 shiro 安全框架
官网:www.fhadmin.org 工作流模块---------------------------------------------------------------------------- ...
- vue应用难点总结
一.父子组件生命周期 父组件create->子组件create->子组件mounted->父组件mounted 当一个钩子函数使用了异步请求时,并不会等该钩子函数中所有异步的回调都执 ...
- 通过 Web Deploy 发布的配置
罩着别人的配置弄了一下午,死活认证通不过,后来好不容易试出来,备忘. 服务端:安装IIS,启动管理程序,安装Web Deploy, 建立网站,建立IIS用户,进网站的权限管理里面给IIS用户授权. V ...
- Redis 学习-持久化与主从复制
一.持久化 1. RDB rdb 是 redis 内存到硬盘的快照,用于持久化 ①. 通过执行命令,主动保存快照 save # 执行保存快照,执行时 redis 会处理阻塞状态直至执行完成. bgsa ...
- HDFS-SecondaryNameNode(SNN)角色介绍
它出现在Hadoop1.x版本中,又称辅助NameNode,在Hadoop2.x以后的版本中此角色消失.如果充当datanode节点的一台机器宕机或者损害,其数据不会丢失,因为备份数据还存在于其他的d ...
- Oracle Drop Table
DROP TABLE 使用DROP TABLE语句将表或对象表移动到回收站或从数据库中完全删除表及其所有数据. 注:除非指定purge子句,否则drop table语句不会将表占用的空间释放回表空间供 ...
- 微信小程序~性能
(1)优化建议 setData setData 是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口.在介绍常见的错误用法前,先简单介绍一下 setData 背后的工作原理. 工作原理 小程序 ...
- Javascript获取页面的各种坐标汇总
说明,本文全部内容都基于各浏览器的标准渲染模式.也就是在HTML文件首部有标签 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...