https://www.luogu.org/problemnew/show/P3359

因为 a ^ b ^ b = a,所以我们预处理 1 到所有点的距离,将删边的操作反过来变成加边,对于每一个联通块用 map 维护 1 到联通块中的点异或值为 x 的数的个数,乘法原理统计答案,加边时启发式合并即可

#include <bits/stdc++.h>
using namespace std; typedef unsigned long long ull;
typedef long long ll; template <typename T>
inline void read(T &f) {
f = 0; T fu = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') fu = -1; c = getchar();}
while(c >= '0' && c <= '9') {f = (f << 3) + (f << 1) + (c & 15); c = getchar();}
f *= fu;
} const int N = 1e5 + 5; struct Edge {
int u, v, next, val;
}G[N << 1]; map <int, int> t[N];
ll Ans[N], ans;
int d[N], f[N], del[N], x[N], y[N], z[N], head[N];
int n, tot; inline void addedge(int u, int v, int val) {
G[++tot] = (Edge) {u, v, head[u], val}, head[u] = tot;
G[++tot] = (Edge) {v, u, head[v], val}, head[v] = tot;
} int find(int x) {return f[x] == x ? x : f[x] = find(f[x]);} void dfs(int u, int fa) {
for(int i = head[u]; i; i = G[i].next) {
int v = G[i].v;
if(v == fa) continue;
d[v] = d[u] ^ G[i].val;
dfs(v, u);
}
} int main() {
cin >> n;
for(int i = 1; i < n; i++) {
read(x[i]); read(y[i]); read(z[i]);
addedge(x[i], y[i], z[i]);
}
for(int i = 1; i < n; i++) read(del[i]);
for(int i = 1; i <= n; i++) f[i] = i;
dfs(1, 0); for(int i = 1; i <= n; i++) t[i][d[i]] = 1;
for(int i = n - 1; i >= 1; i--) {
int l = x[del[i]], r = y[del[i]];
int x = find(l), y = find(r);
if(t[x].size() > t[y].size()) swap(x, y);
for(map <int, int> :: iterator it = t[x].begin(); it != t[x].end(); it++) {
ans += (ll)it -> second * (ll)t[y][it -> first];
t[y][it -> first] += it -> second;
}
f[x] = y; Ans[i] = ans; t[x].clear();
}
for(int i = 1; i <= n; i++) printf("%lld\n", Ans[i]);
return 0;
}

最新文章

  1. 使用Microsoft Roslyn提取C#和VB.NET源代码中的字符串常量
  2. 学习Linux系列--Python资源收集
  3. ImageLoader框架的使用、调用系统相册显示图片并裁剪显示、保存图片的两种方式
  4. python练习程序(c100经典例5)
  5. Python 结巴分词模块
  6. 如何用命令的方式查看你的Office2010密钥是否是永久的有效
  7. Linux 系统结构详解
  8. 初识DirectX和COM
  9. Android开发记录(转)
  10. Android中调用C++函数的一个简单Demo
  11. android 图片合成
  12. Python学习入门基础教程(learning Python)--2.2 Python下的变量基础
  13. 关于“foreach循环”中遇到的几个问题总结
  14. JAVA课程设计-----加减法测试博客
  15. HAOI2016 找相同字符 后缀自动机
  16. 3G 4G 5G中的网络安全问题——文献汇总
  17. Git -- 分支管理简介
  18. Oracle HA 之 oracle 11.2 rac库配置active dataguard
  19. Python3.6编译安装以及python开发之virtualenv与virtualenvwrapper
  20. Http中Get和Post的区别(转载)

热门文章

  1. ubuntu kylin 设置 wifi
  2. gvim
  3. Gym101128F:Landscaping
  4. 86. Partition List (List)
  5. iOS设备尺寸
  6. java的集合框架详解
  7. 开发工具Visual Studio使用相关知识和经验的碎片化记录
  8. Web测试实践--Rec 2
  9. SQL日期跟时间值序列
  10. QT之Variant