51nod-1253: Kundu and Tree
【传送门:51nod-1253】
简要题意:
给出一棵n个点的树,树上的边要么为黑,要么为红
求出所有的三元组(a,b,c)的数量,满足a到b,b到c,c到a三条路径上分别有至少一条红边
题解:
显然黑边是没用的,那么我们将只有黑边相连的点分成若干的连通块
那么答案就很显然了,容斥一手
就是(所有三元组的数量)-(三个点都在一个连通块的数量)-(两个点在一个连通块,另一个不在的数量)
参考代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
LL Mod=1e9+;
struct node
{
int x,y,c,next;
}a[];int len,last[];
void ins(int x,int y,int c)
{
a[++len]=(node){x,y,c,last[x]};
last[x]=len;
}
int fa[];
int findfa(int x)
{
if(fa[x]!=x) fa[x]=findfa(fa[x]);
return fa[x];
}
int tot[];
void dfs(int x,int f,int rt)
{
tot[rt]++;
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(y==f||a[k].c==) continue;
dfs(y,x,rt);fa[y]=rt;
}
}
char st[];
int main()
{
int n;
scanf("%d",&n);
len=;memset(last,,sizeof(last));
for(int i=;i<n;i++)
{
int x,y;
scanf("%d%d%s",&x,&y,st+);
ins(x,y,st[]=='b');ins(y,x,st[]=='b');
}
for(int i=;i<=n;i++) fa[i]=i,tot[i]=;
for(int i=;i<=n;i++) if(fa[i]==i) dfs(i,,i);
LL ans=(LL)n*(n-)*(n-)/%Mod;
for(int i=;i<=n;i++)
{
int fx=findfa(i);
if(fx==i)
{
if(tot[i]>=) ans=(ans-(LL)tot[i]*(tot[i]-)*(tot[i]-)/%Mod+Mod)%Mod;
if(tot[i]>=) ans=(ans-(LL)tot[i]*(tot[i]-)/%Mod*(n-tot[i])%Mod+Mod)%Mod;
}
}
printf("%lld\n",ans);
return ;
}
51nod-1253: Kundu and Tree的更多相关文章
- 51nod 1253:Kundu and Tree(组合数学)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1253 所有的三元组的可能情况数有ans0=C(n,3).然后 ...
- 51nod_1253:Kundu and Tree(组合数学)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1253 全为红边的情况下,ans=C(n,3).假设被黑边相连 ...
- HackerRank "Kundu and Tree" !!
Learnt from here: http://www.cnblogs.com/lautsie/p/3798165.html Idea is: we union all pure black edg ...
- 51nod1253 Kundu and Tree
树包含N个点和N-1条边.树的边有2中颜色红色('r')和黑色('b').给出这N-1条边的颜色,求有多少节点的三元组(a,b,c)满足:节点a到节点b.节点b到节点c.节点c到节点a的路径上,每条路 ...
- 51Nod1253 Kundu and Tree 容斥原理
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1253.html 题目传送门 - 51Nod1253 题意 树包含 N 个点和 N-1 条边.树的边有 ...
- 【51nod1253】Kundu and Tree(容斥+并查集)
点此看题面 大致题意: 给你一棵树,每条边为黑色或红色, 求有多少个三元组\((x,y,z)\),使得路径\((x,y),(x,z),(y,z)\)上都存在至少一条红色边. 容斥 我们可以借助容斥思想 ...
- NOIP前做题记录
鉴于某些原因(主要是懒)就不一题一题写了,代码直接去\(OJ\)上看吧 CodeChef Making Change 传送门 完全没看懂题解在讲什么(一定是因为题解公式打崩的原因才不是曲明英语太差呢- ...
- 10.23NOIP模拟题
叉叉题目描述现在有一个字符串,每个字母出现的次数均为偶数.接下来我们把第一次出现的字母 a 和第二次出现的 a 连一条线,第三次出现的和四次出现的字母 a 连一条线,第五次出现的和六次出现的字母 a ...
- 51nod 1576 Tree and permutation(树的重心+dfn序)
乍一看我不会. 先不考虑加点. 先考虑没有那个除\(2\). 考虑每一条边的贡献,假设某一条边把这棵树分成大小为x,y的两个部分. 那么这条边最多可以被使用\(min(x,y)*2\)次(因为有进有出 ...
随机推荐
- 源码高速定位工具-qwandry
https://github.com/adamsanderson/qwandry qwandry 能高速定位到我们须要找到 库文件, 项目 的工具. Ruby中实现高速定位的方法有好多种.我知道的有三 ...
- python spark kmeans demo
官方的demo from numpy import array from math import sqrt from pyspark import SparkContext from pyspark. ...
- 【转】iOS 设置APP的名称(浅述APP版本国际化与本地化)
原文网址:http://www.jianshu.com/p/a3a70f0398c4 前言 App的名字设置方式有很多种,如果在App打包上线时不做修改,最终App的名字就是Xcode在建立工程时的名 ...
- java格式化时间到毫秒
转自:https://blog.csdn.net/iplayvs2008/article/details/41910835 java格式化时间到毫秒: SimpleDateFormat formatt ...
- 基于macOS+VMware的GNS3内VM上公网
笔者经常需要做网络实验,GNS3就是笔者最喜欢用的模拟器,为了便于实验,需要能从macos上直接ssh登陆模拟出来的vm,并且vm需要上公网.经过研究,已解决此问题,并以此分享出来 tag: maco ...
- 敬请关注 Linr 公众号
- PHP的反射API
PHP5的类和对象并没有告诉我们类内的所有一切,而只是报告了他们的公共成员.要充分了解一个类,需要知道其私有 成员和保护成员,还要知道其方法所期望的参数,对此我们要使用API 1.获得反射API的转储 ...
- 页面定制CSS代码初探(二):自定义h2标题样式 添加阴影 添加底色 等
故事的开始 先说一下<h2></h2>原先默认是空白的,很难看 然后今天无意中看到一个博友的标题很好看啊,一直就想要这种效果有没有? 好的东西自然要拿过来啦 通过审查元素,果然 ...
- 哪里获取ZBrush简体中文版?
ZBrush®精简版(ZBrush简体中文版)ZBrushCore发布已经有一段日子了,相信不少人早已迫不及待地开始尝试了,不知道你们的体验如何?毋庸置疑的是,ZBrushCore专为刚接触3D并希望 ...
- ZBrush为电影制作设计独特的生物概念
任何一个从事3D行业的艺术家,在雕刻和画画方面,都要有牢固的基本技能,还要会使用一些软件.比如今天我们提到的这位概念设计师.插画师和艺术导演Ian Joyner,他在创作新角色之前,都会思考如何以及为 ...