一道公式题——数三角形
数三角形(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都可以简单地通过算出每个节点连出的不同颜色的边的条数算出。
这样一来就可以在线性时间完成计算。
【代码不给】