题目描述
题解
首先容斥一下~
同色三角形=总三角形-不同色三角形
总三角形的数量就是
C3n
不同色三角形一定存在一对异色边
枚举每一个点,以这个点为异色边的连接点选一对异色边,剩下的一条边无所谓了
但是一个三角形会被统计两遍(两个连接点),除2就行了
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 1005
#define LL long long
int n,m;
int e[N][N],d[N];
LL ans;
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=m;++i)
{
int x,y;scanf("%d%d",&x,&y);
e[x][y]=e[y][x]=1;
}
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
d[i]+=e[i][j];
for (int i=1;i<=n;++i)
ans+=(LL)d[i]*(n-1-d[i]);
ans=(LL)n*(n-2)*(n-1)/6-ans/2;
printf("%I64d\n",ans);
}