问题 4350 --同色三角形

4350: 同色三角形★★★★

时间限制: 1 Sec  内存限制: 512 MB
提交: 18  解决: 10
[提交][状态][命题人:]

题目描述

有一个 n(n ≤ 8000) 个点的完全无向图,每条边被染为黑色或白色。求三角形 (a,b,c) 的个数,其中 a <b<c 且 (a,b),(b,c),(a,c) 三边均为同一种颜色。
为避免输入过大,采用以下随机数函数生成边。


namespace GenHelper
{
    unsigned z1,z2,z3,z4,b,u;
    unsigned get()
    {
        b=((z1<<6)^z1)>>13;
        z1=((z1&4294967294U)<<18)^b;
        b=((z2<<2)^z2)>>27;
        z2=((z2&4294967288U)<<2)^b;
        b=((z3<<13)^z3)>>21;
        z3=((z3&4294967280U)<<7)^b;
        b=((z4<<3)^z4)>>12;
        z4=((z4&4294967168U)<<13)^b;
        return (z1^z2^z3^z4);
    }
    bool read() {
      while (!u) u = get();
      bool res = u & 1;
      u >>= 1; return res;
    }
    void srand(int x)
    {
        z1=x;
        z2=(~x)^0x233333333U;
        z3=x^0x1234598766U;
        z4=(~x)+51;
      u = 0;
    }
}
using namespace GenHelper;
bool edge[8005][8005];
int main() {
  int n, seed;
  cin >> n >> seed;
  srand(seed);
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
        edge[j][i] = edge[i][j] = read();
  return 0;
}


其中 edge 数组表示边的颜色。 edge[i][j]=1 表示 i 到 j 的边为黑色,反之为白色。(∀i,0≤i≠j≤n−1))

输入

输入一行包含两个整数 n(n≤8000),seed(seed≤10^9) ,表示节点数和随机数种子。

输出

输出一行表示答案。
样例输入
Copy
10 114514
样例输出
Copy
35

提示

来源

[提交][状态]