一道公式题——数三角形

数三角形(count)

                         时限:10s 内存:512M

刚刚上大学的洁洁在学习组合数学的过程中遇到一道麻烦的题目,她希望你能帮助她解决。给定一张无向完全图G,其中大部分边被染成蓝色,但也有一些边被染成红色或者绿色。现在,洁洁需要给这张图的多样性进行打分。一张图的多样性取决于它的同色和异色三角形的个数。具体来说,G中每有一个三边颜色不同的三角形可以得3分,每有一个三边颜色相同的三角形则要被扣掉6分,其它三角形不得分也不扣分。

现在,请你写一个程序来计算G的多样性分数。

输入数据:

第一行两个正整数n和m其中n表示G中顶点的个数,m表示G中红色或者绿色的边的条数。

接下来m行每行包括三个整数a b c,代表连接顶点a和顶点b的边颜色为红色(c=1)或者绿色(c=2)

输出数据:  

一行,G的多样性得分 mod 9973 的值。

 

样例输入1

4 3

1 2 1

1 3 1

2 3 1

样例输出1

9967

样例输入2:

4 4

1 2 1

1 3 1

2 3 1

1 4 2

样例输出2

0

数据范围:

对于20%的数据,n<=500

对于40%的数据,n<=2000

对于100%的数据,n<=50000,m<=200000。

 

本题考查组合计数方法,算两次。本题的关键是计算∠的个数。一个角由一个顶点和两条边组成。

用A1,A2,A3分别表示两边为红绿,红蓝和绿蓝的∠的个数。

用B1,B2,B3分别表示两边都是红,绿和蓝的∠的个数。

用S表示异色三角形的个数。

用T表示三边同色三角形的个数。

用L表示其它三角形的个数,即只有两种颜色的三角形的个数。

用算两次的方法,我们可以得到,

3S+2L=A1+A2+A3

L+3T=B1+B2+B3

这样一来,总得分为

3S-6T=A1+A2+A3-2B1-2B2-2B3

注意到所有Ai和Bi都可以简单地通过算出每个节点连出的不同颜色的边的条数算出。

这样一来就可以在线性时间完成计算。

【代码不给】

原文地址:https://www.cnblogs.com/ZDHYXZ/p/8724308.html