bzoj 2916: [Poi1997]Monochromatic Triangles(推理)

来源:互联网 发布:在线询问医生软件 编辑:程序博客网 时间:2024/05/16 20:27

2916: [Poi1997]Monochromatic Triangles

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 347  Solved: 180
[Submit][Status][Discuss]

Description

       空间中有n个点,任意3个点不共线。每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形。给你一组数据,计算同色三角形的总数。

Input

第一行是整数n, 3 <= n <= 1000,点的个数。

第二行是整数m, 0 <= m <= 250000,红线数目。
接下来的m行,每行两个数pk1 <= p < k <= n。表示一条红线的两个端点。

Output

  一个整数,单色三角形的数目。

Sample Input

6
9
1 2
2 3
2 5
1 4
1 6
3 4
4 5
5 6
3 6

Sample Output

2


答案就是总三角形个数-异色三角形个数

总三角形个数很明显就是C(n, 3)

异色三角形其中两个端点的两边颜色一定不一样,所以如果某个点有x条红边,y条蓝边,那么包含这个点的异色三角形数量就为x*y,因为是完全图,有公式


其中d[]是每个点的入度


#include<stdio.h>#define LL long longint in[1005];int main(void){LL ans, sum;int n, m, i, x, y;while(scanf("%d%d", &n, &m)!=EOF){for(i=1;i<=m;i++){scanf("%d%d", &x, &y);in[x]++, in[y]++;}sum = 0;ans = (LL)n*(n-1)*(n-2)/6;for(i=1;i<=n;i++)sum += (n-1-in[i])*in[i];printf("%lld\n", ans-sum/2);}return 0;}


原创粉丝点击