T680285 [CCSP2019 Pre] CCSP 子图计数

题目背景

**时间限制:** 1.0 秒 **空间限制:** 512 MB 注意:洛谷等 OJ 的空间占用计算方式为实际占用制(即只计算实际被写入内容的空间),而非 OI 当中使用的分配制(即开多大的数组都计算进去),因此在本题中你可以预先开启比 512MB 更大的数组空间。 由于 std 无法满足对应的时空限制,因此我们提供时限 2s 空间 2G 的[评测链接](https://www.smqyoj.com/p/CCSP2019A)。

题目描述

本题中,我们考虑的图都是无向图,且没有自环,没有重边,边上无权值,每个点上标有一个字符,为 `C`、`S` 或 `P`。 我们称一个图是“CCSP图”,当且仅当该图满足以下所有条件: * 有 4 个点、4 条边的连通图; * 4 个点上的字符(不考虑顺序)为两个 `C`、一个 `S`、一个 `P`; * 图中存在一个长度为 3 的环。 现在,给你一个图,你需要统计其中“CCSP子图”的个数。即你需要在图中选出 4 个点与 4 条连接这些点的边,统计多少种选法会使得选出的图是“CCSP图”。 注意:如果两种选法选取的点相同而边不同,也认为是不同的选法。

输入格式

从标准输入读入数据。 第一行包含两个整数 $n, m$,分别表示图的点数和边数。 第二行包含一个长度为 $n$ 的仅包含 `C`、`S`、`P` 的字符串,其中第 $i$ 个字符表示 $i$ 号点上的字符。 接下来 $m$ 行,每行包含两个整数。设其中第 $j$ 行的整数分别为 $u_j, v_j$,则表示存在一条连接 $u_j$ 与 $v_j$ 的边。 图上的点以从 $1$ 到 $n$ 的不同正整数编号;保证输入的图没有自环与重边;每行相邻的两个整数之间用一个空格隔开。

输出格式

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

说明/提示

### 子任务 对于所有的数据,保证 $0 \leq n, m \leq 10^6$,每条边满足 $1 \leq u_j, v_j \leq n$。 本题以子任务的方式评测。每个子任务包含若干测试点,你需要通过某个子任务的所有测试点才能得到该子任务的分数。 | 子任务编号 | 分数 | $n,m\le$ | | :----: | :---: | :---: | | 1 | 14 | $3$ | | 2 | 34 | $4$ | | 3 | 21 | $10$ | | 4 | 13 | $100$ | | 5 | 8 | $1000$ | | 6 | 5 | $10^4$ | | 7 | 3 | $10^5$ | | 8 | 2 | $10^6$ | 除样例外的所有测试数据均为随机生成的,具体生成方式如下: * 人工指定 $n, m$; * 独立生成每个点的字符,其中 `C` 的概率为 $1/2$,`S` 与 `P` 的概率各为 $1/4$; * 依次生成每一条边:每个点被连接的概率正比于它的度数+$1/\sqrt{n}$,但是如果生成出了自环或重边,则丢弃之并重新生成。 ### 提示 本题最后的一些部分分难度较大而分数较少,性价比很低,请合理规划比赛时间。