BOJ 1575 Triangles

Triangles

Accept:12     Submit:28

Time Limit:1000MS     Memory Limit:65536KB

Description

There are points given in a space. There are no three points, such that they lie on the same straight line. Each pair of points is connected by a segment coloured red or black. Each triangle, whose sides have the same colour is called a monochromatic triangle. We are given a list of all red segments and we want to find the number of all monochromatic triangles.

 

InputFormat

The first line is an integer T(1≤T≤20) indicating the case number.

For each case,the first line is N(1≤N≤1000) indicating the number of points and M(1≤M≤1000000) indicating the number of red edges.

In each of the following M lines there are two integers x and y separated by a single space(1≤x,y≤N). They are numbers of vertices which are end points of a red segment.

 

OutputFormat

For each case output the number of monochromatic triangles(which all 3 edges are same color).

 

SampleInput

1

6 9

1 2

2 3

2 5

1 4

1 6

3 4

4 5

5 6

3 6

SampleOutput

2

第三场新生排位赛的C题,比赛时看题面就吓到了,但后来听学长讲过后,发现经过转换后是一道很简单的数学题。

给出n个点构成的一个完全图,图中的边有两种颜色,红色和黑色,求同色边构成的三角形有多少个。

首先我们知道图中三角形总数为C(n,3)

对于每一个点i,我们可以统计出由它连出去的红色边数red[i]和黑色变数n-1-red[i],这样该点连出去的不同色三角形就是red[i]*(n-1-red[i])

将所有点连出去的不同色三角形数目1求和再除以2(因为每条边被计算了两次)就得到图中不同色三角形的总数。

三角形总数减去不同色三角形数就是同色三角形数

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 
 5 using namespace std;
 6 
 7 long red[1001];
 8 
 9 int main()
10 {
11     int t;
12     long m,n;
13 
14     scanf("%d",&t);
15 
16     while(t--)
17     {
18         int a,b;
19         long ans,total,dif=0;
20 
21         memset(red,0,sizeof(red));
22 
23         scanf("%ld %ld",&n,&m);
24         total=n*(n-1)*(n-2)/6;
25 
26         for(int i=1;i<=m;i++)
27         {
28             scanf("%d %d",&a,&b);
29             red[a]++;
30             red[b]++;
31         }
32 
33         for(int i=1;i<=n;i++)
34             dif+=red[i]*(n-1-red[i]);
35         ans=total-dif/2;
36 
37         printf("%ld\n",ans);
38     }
39 
40     return 0;
41 }
[C++]

 

 

posted @ 2013-07-12 09:34  ~~Snail~~  阅读(250)  评论(0编辑  收藏  举报