POJ3417 Network暗的连锁 (树上差分)
树上的边差分,x++,y++,lca(x,y)-=2.
m条边可以看做将树上的一部分边覆盖,就用差分,x=1,表示x与fa(x)之间的边被覆盖一次,m次处理后跑一遍dfs统计子树和,每个节点子树和val=1,说明割去这条边后只有一种方案,val=0,说明割去后随便再割一条都行,有m中方案。
题很简单但是调了半天,发现倍增的数组开小了(开的20),以后防止这种情况开成25应该比较稳妥。
1 #include <cstdio>
2 #include <iostream>
3 #include <cstring>
4 #include <cstdlib>
5 #include <algorithm>
6 #define ll long long
7 using namespace std;
8 const int N = 1e5 + 10;
9 int head[N], to[N << 1], nxt[N << 1], tot;
10 void add(int x, int y) {
11 nxt[++tot] = head[x];
12 head[x] = tot;
13 to[tot] = y;
14 }
15 int n, m, d[N], f[N][21], val[N];
16 ll ans = 0;
17
18 void dfs(int u, int fa) {
19 for (int i = head[u]; i; i = nxt[i]) {
20 int v = to[i];
21 if (v == fa) continue;
22 d[v] = d[u] + 1;
23 f[v][0] = u;
24 for (int j = 1; j <= 20; j++)
25 f[v][j] = f[f[v][j - 1]][j - 1];
26 dfs(v,u);
27 }
28 }
29
30 int lca(int x, int y) {
31 if (d[x] > d[y]) swap(x, y);
32 for (int i = 20; i >= 0; i--)
33 if (d[f[y][i]] >= d[x]) y = f[y][i];
34 if (x == y) return x;
35 for (int i = 20; i >= 0; i--)
36 if (f[x][i] != f[y][i]) x = f[x][i], y = f[y][i];
37 return f[x][0];
38 }
39
40 void solve(int u) {
41 for (int i = head[u]; i; i = nxt[i]) {
42 int v = to[i];
43 if (d[v] <= d[u]) continue;
44 solve(v);
45 val[u] += val[v];
46 }
47 }
48
49 int main() {
50 scanf("%d%d", &n, &m);
51 for (int i = 1; i < n; i++) {
52 int a, b;
53 scanf("%d%d", &a, &b);
54 add(a, b), add(b, a);
55 }
56 d[1] = 1, dfs(1,0);
57 for (int i = 1; i <= m; i++) {
58 int x, y; cin >> x >> y;
59 int z = lca(x, y);
60 val[x]++, val[y]++, val[z] -= 2;
61 }
62 solve(1);
63 for (int i = 2;i <= n; i++) {//注意从2开始,val[2]表示2和1之间这条边被覆盖的次数
64 if (val[i] == 0) ans += m;
65 if (val[i] == 1) ans ++;
66 }
67 printf("%lld\n", ans);
68 return 0;
69 }
POJ3417 Network暗的连锁 (树上差分)的更多相关文章
- [POJ3417]Network(LCA,树上差分)
Network Description Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried ...
- poj3417 Network/闇の連鎖[树上差分]
首先隔断一条树边,不计附加边这个树肯定是断成两块了,然后就看附加边有没有连着的两个点在不同的块内. 方法1:BIT乱搞(个人思路) 假设考虑到$x$节点隔断和他父亲的边,要看$x$子树内有没有点连着附 ...
- poj3417 Network 树上差分+LCA
题目传送门 题目大意:给出一棵树,再给出m条非树边,先割掉一条树边,再割掉一条非树边,问有几种割法,使图变成两部分. 思路:每一条 非树边会和一部分的树边形成一个环,分三种情况: 对于那些没有形成环的 ...
- poj3417 Network——LCA+树上差分
题目:http://poj.org/problem?id=3417 根据一条边被几个环覆盖来判断能不能删.有几种情况等: 用树上差分,终点 s++,LCA s-=2,统计时计算子树s值的和即可: 用S ...
- 【题解】POJ 3417 Network(倍增求LCA+DP+树上差分)
POJ3417:http://poj.org/problem?id=3417 思路 我们注意到由“主要边”构成一颗树 “附加边”则是非树边 把一条附加边(x,y)加入树中 会与树上x,y之间构成一个环 ...
- poj3417 闇の連鎖 【树上差分】By cellur925
闇の連鎖(yam.pas/c/cpp)题目描述传说中的暗之连锁被人们称为 Dark.Dark 是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现 Dark 呈现无向图的结构,图中有 ...
- [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)
[Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...
- LOJ #10131 「一本通 4.4 例 2」暗的连锁
LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...
- 【BZOJ-4326】运输计划 树链剖分 + 树上差分 + 二分
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 703 Solved: 461[Submit][Status] ...
随机推荐
- 洛谷 P5627 题解
题意 Link 求 \[\sum_{i=1}^{2^n}\log_2\left(\prod_{j=1}^i\operatorname{lowbit}(j)\right) \] \(n\le 2^{64 ...
- 题解 P2657 【[SCOI2009] windy 数】
数位 dp. // 数位 dp 其实是爆搜加记忆化 #include<iostream> #include<cstring> #include<cmath> usi ...
- iNeuOS工业互联网操作系统,设备运维业务和“低代码”表单开发工具
目 录 1. 概述... 2 2. 设备运维业务... 3 3. "低代码"表单开发工具... 6 1. 概述 iNeuOS工业互联网 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(9)-Fiddler如何设置捕获Https会话
1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议,不像前十几年前直接是http协议直接裸奔在互联网.还有的小伙伴或者童鞋们按照上一篇宏哥的配置都配置好了,想大展身手抓一下百度的包, ...
- Frida使用文档(一)安装、启动、运行、关闭
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删!企鹅:1033383881 Frida使用 ...
- ajax.readyState与ajax.status一览
ajax.readyState 0 -(未初始化)还没有调用send()方法 1 -(载入)已调用send()方法,正在发送请求 2 -(载入完成)send()方法执行完成,已经接收到全部响应内容 3 ...
- django中的静态文件
静态文件 1.什么是静态文件 在django中静态文件是指那些图片.css样式.js样式.视频.音频等静态资源. 2.为什么要配置静态文件 这些静态文件往往不需要频繁的进行变动,如果我们将这些静态文件 ...
- MyBatis 02 配置
导入jar包 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</a ...
- thinkphp 5 及一下或php项目里实现模糊查询
想在thinkPHP或者PHP项目实现模糊查询怎么实现呢? 今天在网上搜了一下用 mysql里的 like 就可以实现 怎么用呢? 看代码: 错误用法: where('title','like',$s ...
- 深入理解Spring事件机制(一):广播器与监听器的初始化
前言 Spring 从 3.x 开始支持事件机制.在 Spring 的事件机制中,我们可以令一个事件类继承 ApplicationEvent 类,然后将实现了 ApplicationListener ...