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 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
随机推荐
- (转)三大WEB服务器对比分析(apache ,lighttpd,nginx)
ref : https://www.iteye.com/blog/hai0378-1860220 一.软件介绍(apache lighttpd nginx) 1. lighttpd Light ...
- quartz2.3.0(六)job任务异常处理方式
Job1类 package org.quartz.examples.example6; import org.quartz.DisallowConcurrentExecution; import or ...
- MySQL Group Replication的安装部署
一.简介 这次给大家介绍下MySQL官方最新版本5.7.17中GA的新功能 Group Replication . Group Replication是一种可用于实现容错系统的技术.复制组是一组通过消 ...
- 获取电脑 ip 地址 及系统
public static void main(String[] args) throws UnknownHostException { //获取电脑系统 结果:os.name:Windows 10 ...
- 第三方dll签名
1.打开vs Tools下的工具命令 2.生成随机密钥对C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC>sn -k NonSignL ...
- python之json库的使用
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 1.json库的使用 使用 JSON 函数需要导入 json 库:import jso ...
- 了解Django之前
什么是web应用? 通俗地讲,就是通过浏览器访问一个网址,该网站从后台调取数据,然后把相应的界面展示给用户这样的一个过程. 什么是HTTP协议? 即超文本传输协议:规定了客户端与服务端消息传输的格 ...
- 爬虫之PyQuery的base了解
爬虫之PyQuery的base了解 pyquery库是jQuery的Python实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好,和它差不多的还有BeautifulSo ...
- Synopsys DC综合脚本示例
#****************************************************************************** # File : syn_example ...
- sql server 获取某一字段分组数据的前十条记录
1.sql 语法 select m, n from ( select row_number () over (partition by m order by n desc) rn,--以m分组,分组内 ...