题意:
空间中有n个点,任意3个点不共线。每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形。给你一组数据,计算同色三角形的总数。
题解:
傻逼题然而我也傻逼想了很久
先假设所有都是蓝色的。
那么答案显然就是
C3n
然后减去至少有一条红边的三角形,再加上至少有两条红边的三角形(不用去重)
code:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<bitset>
#include<iostream>
#define LL long long
using namespace std;
struct node{
LL x,y;
}a[250010];
LL n,m,C[1010][4],d[1010];
void pre()
{
for(LL i=0;i<=n;i++)
{
C[i][0]=1;
for(LL j=1;j<=i&&j<=3;j++) C[i][j]=C[i-1][j]+C[i-1][j-1];
}
}
int main()
{
scanf("%lld %lld",&n,&m);
pre();
for(LL i=1;i<=m;i++)
{
scanf("%lld %lld",&a[i].x,&a[i].y);
d[a[i].x]++;d[a[i].y]++;
}
LL ans=0;
ans=C[n][3];
for(LL i=1;i<=m;i++)
ans-=C[n-2][1];
for(LL i=1;i<=n;i++)
if(d[i]>=2) ans+=C[d[i]][2];
printf("%lld",ans);
}