[BZOJ2916][Poi1997]Monochromatic Triangles(容斥原理+组合数学)

来源:互联网 发布:对角矩阵的n次方怎么求 编辑:程序博客网 时间:2024/05/17 02:32

题目描述

传送门

题解

首先容斥一下~
同色三角形=总三角形-不同色三角形
总三角形的数量就是C3n
不同色三角形一定存在一对异色边
枚举每一个点,以这个点为异色边的连接点选一对异色边,剩下的一条边无所谓了
但是一个三角形会被统计两遍(两个连接点),除2就行了

代码

#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 1005#define LL long longint 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);}
0 0