树上的边差分,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. linux 学习 mysql安装到连接

    在Centos7.6 上安装mysql ps:一般mysql安装后会在/var/log/下面生成一个mysqld.log文件,如果遇到启动不了或者其他问题,基本都可以在这个log文件里面找到错误原因 ...

  2. Clang-format-12安装

    ubu18 clang-format安装 1.更新源 wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - ...

  3. GreatSQL特性介绍及前景展望 | 数据技术嘉年华2021分享PPT发布

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 全 ...

  4. ZOJ 3537 (凸包 + 区间DP)(UNFINISHED)

    #include "Head.cpp" const int N = 10007; int n, m; struct Point{ int x,y; bool operator &l ...

  5. Luogu3379 【模板】最近公共祖先(LCA) (倍增LCA)

    蒟蒻又来复习模板了.还WA了两次 #include <iostream> #include <cstdio> #include <cstring> #include ...

  6. HTML引用CSS实现自适应背景图

    链接图片背景代码 body {background: url('链接') no-repeat center 0;} 颜色代码 body{background:#FFF} 链接图片背景代码2 <b ...

  7. 永久解决IDEA 连接 mysql时区问题`

    永久解决IDEA 连接 mysql时区问题` 找到mysql的安装路径下的my.ini文件 加入以下代码 [mysqld] default-time_zone='+8:00' 关闭然后保存 打开然后以 ...

  8. KingbaseESV8R6如何针对表单独设置vacuum策略

    背景 书接上文 KingbaseES应对表年龄增长过快导致事务回卷 ,有些特殊业务场景不能靠全局的autovacuum方法,例如大型数据库系统,频繁做update的系统,还有上文提到的做实时数据同步的 ...

  9. KingbaseES 如何开启并进入数据库

    关键字: KingbaseES.sys_ctl.ksql 一.数据库启动前环境检测 1.1 查看kingbase用户环境变量配置 图1-1 查看.bashrc环境变量配置 1.2 应用环境变量 [ki ...

  10. 在 Windows 搭建 SVN 服务

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16671311.html 最近公司给配了台新电脑,配置 ...