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; }