树上的边差分,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暗的连锁 (树上差分)的更多相关文章

  1. [POJ3417]Network(LCA,树上差分)

    Network Description Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried ...

  2. poj3417 Network/闇の連鎖[树上差分]

    首先隔断一条树边,不计附加边这个树肯定是断成两块了,然后就看附加边有没有连着的两个点在不同的块内. 方法1:BIT乱搞(个人思路) 假设考虑到$x$节点隔断和他父亲的边,要看$x$子树内有没有点连着附 ...

  3. poj3417 Network 树上差分+LCA

    题目传送门 题目大意:给出一棵树,再给出m条非树边,先割掉一条树边,再割掉一条非树边,问有几种割法,使图变成两部分. 思路:每一条 非树边会和一部分的树边形成一个环,分三种情况: 对于那些没有形成环的 ...

  4. poj3417 Network——LCA+树上差分

    题目:http://poj.org/problem?id=3417 根据一条边被几个环覆盖来判断能不能删.有几种情况等: 用树上差分,终点 s++,LCA s-=2,统计时计算子树s值的和即可: 用S ...

  5. 【题解】POJ 3417 Network(倍增求LCA+DP+树上差分)

    POJ3417:http://poj.org/problem?id=3417 思路 我们注意到由“主要边”构成一颗树 “附加边”则是非树边 把一条附加边(x,y)加入树中 会与树上x,y之间构成一个环 ...

  6. poj3417 闇の連鎖 【树上差分】By cellur925

    闇の連鎖(yam.pas/c/cpp)题目描述传说中的暗之连锁被人们称为 Dark.Dark 是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现 Dark 呈现无向图的结构,图中有 ...

  7. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  8. LOJ #10131 「一本通 4.4 例 2」暗的连锁

    LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...

  9. 【BZOJ-4326】运输计划 树链剖分 + 树上差分 + 二分

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 703  Solved: 461[Submit][Status] ...

随机推荐

  1. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...

  2. 题解 P4999 【烦人的数学作业】

    数位 dp. 设 \(dp_{q,i}\)(\(i\in\{0,1,2,3,4,5,6,7,8,9\}\))为 \(1\sim q\) 中 \(i\) 出现的次数,\(1\sim q\) 的数字和显然 ...

  3. 【原创】Python 使用jmpy模块加密|加固 python代码

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 使用jmpy模块 将py文件加密为so或 ...

  4. Point2和Point3类定义

    支持以下图中的运算 类声明: class Point2 { public: Point2(); ~Point2(); Point2(ldouble a); Point2(ldouble a, ldou ...

  5. 达人专栏 | 还不会用 Apache Dolphinscheduler?大佬用时一个月写出的最全入门教程【三】

    作者 | 欧阳涛 招联金融大数据开发工程师 02 Master启动流程 2.10 WorkFlowExecutorThread 里执行 Submit StandByTask 方法 SubmitStan ...

  6. thinkphp 5 及一下或php项目里实现模糊查询

    想在thinkPHP或者PHP项目实现模糊查询怎么实现呢? 今天在网上搜了一下用 mysql里的 like 就可以实现 怎么用呢? 看代码: 错误用法: where('title','like',$s ...

  7. WebStorm 配置 Vue3 的文件模板

    WebStorm 默认的 Vue 模板不是 setup 函数(组合式 API)模板,而是 Options API 模板.在设置中搜索 File and Code Templates 编辑创建 vue ...

  8. Star (欧拉函数)

    题面 Fernando won a compass for his birthday, and now his favorite hobby is drawing stars: first, he ma ...

  9. 【C++】实现D3D9 的 Inline hook

    [C++]实现D3D9 的 Inline hook   简单介绍一下HOOK原理: 函数调用的过程大致是 先push 参数 进去,再执行 call 函数地址 ,进入函数.此时将所调用的函数的前五个字节 ...

  10. JSP中的EL 表达式

    JSP中的EL 表达式 什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的什么作用:EL 表达式主要是代替 jsp ...