题目传送门

题意:

  给定一棵n个点的边权为0或1的树,一条合法的路径(x,y)(x≠y)满足,从x走到y,一旦经过边权为1的边,就不能再经过边权为0的边,求有多少边满足条件?

思路:

  首先这道题,换根dp也可以过(树形dp,点这里

  那么如何并查集做呢,我们考虑一个点$u$,我们将与u通过0边相连的连通点的数量记做$siz0$,将与u通过1边相连的连通点的数量记做$siz1$,那么所有符合条件的0-1边将u作为转折点的,0-0边将u作为终点的,1-1边将u作为终点的边的数量就等于$siz0*siz1-1$,减去的1就是自己连到自己。

  用并查集维护上面的信息,即$f[u][0]$表示u的0边祖先,$f[u][0]$表示u的1边祖先,然后$merge$即可。

#pragma GCC optimize (2)
#pragma G++ optimize (2)
#pragma comment(linker, "/STACK:102400000,102400000")
#include<bits/stdc++.h>
#include<cstdio>
#include<vector>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,b,a) for(int i=b;i>=a;i--)
#define clr(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define pii pair<int,int >
using namespace std;
typedef long long ll;
const int maxn=;
ll rd()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int f[maxn][],siz[maxn][];
int n,a,b,c;
int find(int x,int y){
if(!f[x][y]){
return x;
}
return f[x][y]=find(f[x][y],y);
}
int main(){
cin>>n;
rep(i,,n-){
scanf("%d%d%d",&a,&b,&c);
int fx=find(a,c);
int fy=find(b,c);
if(fx!=fy){
f[fx][c]=fy;
}
}
rep(i,,n){
siz[find(i,)][]++,siz[find(i,)][]++;
}
ll ans=;
rep(i,,n){
ans+=1ll*siz[find(i,)][]*siz[find(i,)][]-;
}
cout<<ans<<endl;
}

最新文章

  1. medoo–高效的轻量级PHP数据库操作类
  2. WinForm 简单蒙版实现控件遮盖
  3. mysql 启动失败
  4. 使用Autofac在ASP.NET Web API上实现依赖注入
  5. Populating Next Right Pointers in Each Node II [Leetcode]
  6. JavaScript高级---门面模式设计
  7. (转)关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
  8. 跟我一起学写jQuery插件开发方法(转载)
  9. 编写一个简单的Web Server
  10. Error Code: 1054. Unknown column &#39;age&#39; in &#39;user&#39;
  11. TCP的基本概念三次握手,四次挥手
  12. spring aop学习记录
  13. 校园电商项目(1) 基于SSM
  14. yum仓库搭建
  15. CSS中float属性
  16. Wireshark安装使用及报文分析(图文详解)
  17. hiho 第七周 完全背包
  18. JAVAWEB 一一 Hibernate(框架)
  19. win10: This file can&#39;t be opened
  20. SIFT在OpenCV中的调用和具体实现(HELU版)

热门文章

  1. 记一下await用法
  2. 【leetcode】991. Broken Calculator
  3. easyUi-datagrid 真分页 + 工具栏添加控件
  4. beautifhulsoup4的使用
  5. php经典趣味算法
  6. 05-树9 Huffman Codes(30 分)
  7. 【软工项目Beta阶段】第11周Scrum会议博客
  8. 2019 牛客暑期多校 第一场 H XOR (线性基)
  9. python 网络编程:socket
  10. 20175203 2018-2019-2《Java程序设计》第四周学习总结