Triangles

http://codeforces.com/problemset/problem/229/C

解题:应该是数学,高中数学白学了

用C(3,n) - 被破坏了三角形数;

对于在m中的每一个点统计它的出度。。

那么 i点和它的任意一个出度点  和 下平面(m在上平面)构成了  出度总数*1*(n-1-出度总数)

View Code
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=1000010;
int out_degree[maxn];
int main()
{
    int   n,m;

    scanf("%d %d",&n,&m);
    memset(out_degree,0,sizeof(out_degree));
    for(int  i=1;i<=m;i++)
    {
        int u,v;
        scanf("%d%d",&u,&v);
        out_degree[u]++;
        out_degree[v]++;
    }

    __int64 sum=0;
    for(int i=1;i<=n;i++)
    {
        sum+=1LL*out_degree[i]*(n-1-out_degree[i]);
    }
    __int64 ans=1LL*n*(n-1)*(n-2)/6-sum/2;
    printf("%I64d\n",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/cs1003/p/2710661.html