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;

}

你可能感兴趣的:(RIA)