路径考虑顺序。

显然合法的路径只有以下两种:

  1. 一段 \(0\) 加一段 \(1\) 或一段 \(1\) 加一段 \(0\)。
  2. 全 \(0\) 或全 \(1\)。

用并查集将边权为 \(0\) 和 \(1\) 的边分别缩起来,对于一个大小为 \(siz\) 的联通块,第二种的答案是 \(siz\left(siz-1\right)\)。

对于第一种,我们枚举 \(0\) 和 \(1\) 的分界点,它所在 \(0\) 和 \(1\) 的联通块大小分别是 \(siz_0\) 和 \(siz_1\),它的答案是 \(\left(siz_0-1\right)\left(siz_1-1\right)\)。

然后这题就做完了,时间复杂度 \(O\left(n\alpha\left(n\right)\right)\)。

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 2
#define NN 200005
#define For(i,x,y)for(i=x;i<=(y);i++)
int fa[NN][N],siz[NN][N];
int read()
{
int A;
bool K;
char C;
C=A=K=0;
while(C<'0'||C>'9')K|=C=='-',C=getchar();
while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
return(K?-A:A);
}
int find(int p,bool type)
{
if(fa[p][type]!=p)fa[p][type]=find(fa[p][type],type);
return fa[p][type];
}
inline void unite(int p,int q,bool type)
{
p=find(p,type),q=find(q,type);
if(p==q)return;
if(siz[p][type]<siz[q][type])fa[p][type]=q,siz[q][type]+=siz[p][type];
else fa[q][type]=p,siz[p][type]+=siz[q][type];
}
int main()
{
bool c;
ll ans=0;
int n,i,x,y;
n=read();
For(i,1,n)fa[i][0]=fa[i][1]=i,siz[i][0]=siz[i][1]=1;
For(i,1,n-1)
{
x=read(),y=read(),c=read();
unite(x,y,c);
}
For(i,1,n)ans+=1LL*(siz[find(i,0)][0]-1)*(siz[find(i,1)][1]-1);
For(i,1,n)
{
ans+=1LL*siz[find(i,0)][0]*(siz[find(i,0)][0]-1)+1LL*siz[find(i,1)][1]*(siz[find(i,1)][1]-1);
siz[find(i,0)][0]=siz[find(i,1)][1]=0;
}
cout<<ans;
return 0;
}

CF1156D 0-1-Tree的更多相关文章

  1. CF 题目选做

    写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...

  2. hdu 1232, disjoint set, linked list vs. rooted tree, a minor but substantial optimization for path c 分类: hdoj 2015-07-16 17:13 116人阅读 评论(0) 收藏

    three version are provided. disjoint set, linked list version with weighted-union heuristic, rooted ...

  3. Device Tree(二):基本概念

    转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...

  4. HDU3333 Turing Tree(线段树)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=3333 Description After inventing Turing Tree, 3x ...

  5. HDU 1710 Binary Tree Traversals(二叉树遍历)

    传送门 Description A binary tree is a finite set of vertices that is either empty or consists of a root ...

  6. easyui 键盘控制tree 上下

    $.extend($.fn.tree.methods, { highlight: function(jq, target){ return jq.each(function(){ $(this).fi ...

  7. Color a Tree[HDU1055]

    Color a Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  8. Hardwood Species 分类: POJ 树 2015-08-05 16:24 2人阅读 评论(0) 收藏

    Hardwood Species Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 20619 Accepted: 8083 De ...

  9. CF 161D Distance in Tree 树形DP

    一棵树,边长都是1,问这棵树有多少点对的距离刚好为k 令tree(i)表示以i为根的子树 dp[i][j][1]:在tree(i)中,经过节点i,长度为j,其中一个端点为i的路径的个数dp[i][j] ...

  10. [ActionScript 3.0] Away3D 官网实例

    /* Dynamic tree generation and placement in a night-time scene Demonstrates: How to create a height ...

随机推荐

  1. Redis学习笔记(四)——数据结构之List

    一.介绍 Redis列表(List)是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(left)或者尾部(right),一个列表最多可以包含232-1个元素(4294967295, ...

  2. SharedPreferences源码分析

    分析达成目标 了解基本实现 SharePreferences是否线程安全 SharePreferences的mode参数是什么 了解apply与commit的区别 导致ANR的原因 Android8. ...

  3. Java学习的第四十三天

    1.例5.1数组元素的引用 public class cjava { public static void main(String[] args) { int i; int []a=new int[1 ...

  4. mysql管理表关系

    表关系管理 关注公众号"轻松学编程"了解更多. 1.概述 ​ 表与表之间的关系可以是一对一.一对多.多对一的.通过外键把表连接起来,外键放在任意一张表都可以,通常选择由从表(相对次 ...

  5. Flask常用API

    Flask常用API 1.os ​ 拼接路径:pathname = os.path.join(basepath, filename) 获得文件名后缀:suffix = os.path.splitext ...

  6. Django项目打分系统

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...

  7. 「SHOI2015」超能粒子炮・改

    「SHOI2015」超能粒子炮・改 给你\(T\)组询问,每组询问给定参数\(n,k\),计算\(\sum\limits_{i=0}^k\dbinom{n}{i}\). \(T\leq10^5,n,k ...

  8. phpword读取内容和样式 生成新的内容

    table样式还未读出 正在测试中, 目前有 rows cell textrun等样式 顺序不固定 可以设定 <?php require 'vendor/autoload.php'; use P ...

  9. 0 quickstart

    说明 使用的安装包有: Prism 6.3 Unity 4.0.1 基于Prism框架的应用程序都包含一个主项目和若干功能模块,主项目负责启动时初始化工作,包括依赖注入容器,定义Shell等等.功能模 ...

  10. CSharpFlink分布式实时计算,OutOfMemoryException异常,你意想不到的原因。

    目录 一.测试过程及问题 二.问题排查及分析过程 三.问题分析及解决过程 四.问题解决初步结果 一.测试过程及问题 从昨天15点左右开始测试,1个主节点,10个计算节点,1000个数据点,每个数据点3 ...