#CCSP2019A. CCSP 子图计数

    ID: 181 Type: Default 2000ms 2048MiB Tried: 29 Accepted: 1 Difficulty: 9 Uploaded By: Tags>图结构三元环计数其他分治数据结构位图/bitsetCCSP特殊题目常数优化

CCSP 子图计数

本题的时空限制由于给出的 std 无法达到要求,因此相对官方设置有所调整。

时间限制: 1.0 秒 2.0 秒

空间限制: 512 MB 2048 MB

题目描述

本题中,我们考虑的图都是无向图,且没有自环,没有重边,边上无权值,每个点上标有一个字符,为 CSP

我们称一个图是“CCSP图”,当且仅当该图满足以下所有条件:

  • 有 4 个点、4 条边的连通图;
  • 4 个点上的字符(不考虑顺序)为两个 C、一个 S、一个 P
  • 图中存在一个长度为 3 的环。

现在,给你一个图,你需要统计其中“CCSP子图”的个数。即你需要在图中选出 4 个点与 4 条连接这些点的边,统计多少种选法会使得选出的图是“CCSP图”。

注意:如果两种选法选取的点相同而边不同,也认为是不同的选法。

输入格式

从标准输入读入数据。

第一行包含两个整数 n,mn, m,分别表示图的点数和边数。

第二行包含一个长度为 nn 的仅包含 CSP 的字符串,其中第 ii 个字符表示 ii 号点上的字符。

接下来 mm 行,每行包含两个整数。设其中第 jj 行的整数分别为 uj,vju_j, v_j,则表示存在一条连接 uju_jvjv_j 的边。

图上的点以从 11nn 的不同正整数编号;保证输入的图没有自环与重边;每行相邻的两个整数之间用一个空格隔开。

输出格式

输出到标准输出。

仅输出一行,包含一个整数,表示图中“CCSP子图”的个数。

4 5
SCPC
1 2
2 3
3 4
4 1
1 3
4
7 10
CCCSSPP
1 2
2 3
3 1
3 4
4 5
5 6
6 7
7 4
2 4
3 7
5

子任务

对于所有的数据,保证 0n,m1060 \leq n, m \leq 10^6,每条边满足 1uj,vjn1 \leq u_j, v_j \leq n

本题以子任务的方式评测。每个子任务包含若干测试点,你需要通过某个子任务的所有测试点才能得到该子任务的分数。

子任务编号 分数 n,mn,m\le
1 14 33
2 34 44
3 21 1010
4 13 100100
5 8 10001000
6 5 10410^4
7 3 10510^5
8 2 10610^6

除样例外的所有测试数据均为随机生成的,具体生成方式如下:

  • 人工指定 n,mn, m
  • 独立生成每个点的字符,其中 C 的概率为 1/21/2SP 的概率各为 1/41/4
  • 依次生成每一条边:每个点被连接的概率正比于它的度数+1/n1/\sqrt{n},但是如果生成出了自环或重边,则丢弃之并重新生成。

提示

本题最后的一些部分分难度较大而分数较少,性价比很低,请合理规划比赛时间。