#B3712. [语言月赛202302] 大碗宽面

    ID: 3888 Type: RemoteJudge 1000ms 2048MiB Tried: 0 Accepted: 0 Difficulty: 3 Uploaded By: Tags>2023O2优化数组语言月赛

[语言月赛202302] 大碗宽面

题目背景

扶苏和她的朋友们在 Impart 酒店开派对。

题目描述

算上扶苏,本次派对共有 nn 个人。但是,并不是任何两个人都互相认识,并且互相认识的人关系也未必好。

具体而言,任意两个人可能是如下三种关系之一:

  1. 敌人
  2. 朋友
  3. 陌生人

派对的一大重要活动是相互握手。对任意两个人 u,vu,v,他们之间的握手情况遵循下面的规则:

  1. 如果 uuvv 是朋友关系,那么他们一定握手一次。
  2. 如果 uuvv 是敌人关系,那么他们一定握手。
  3. 如果 uuvv 是陌生人关系,且存在一个人 ww,使得 wwuuvv 之一的朋友,同时是 u,vu,v 中另一人的敌人,则 uuvv 不会握手,否则 uuvv 一定握手一次。

对第三条规则,简单的说法是:一对陌生人之间,如果某一方的朋友是另一方的敌人,则不握手,否则握手。

已知共有 pp 对人是朋友关系,qq 对人是敌人关系。除了这 p+qp + q 对人,其他每对人均为陌生人关系。

请你求出本次派对一共握手了多少次。

输入格式

第一行是三个整数,依次表示参加派对的人数 nn,朋友关系的条数 pp 和敌人关系的条数 qq
接下来 pp 行,每行两个整数 u,vu,v,表示 uuvv 是朋友关系。
接下来 qq 行,每行两个整数 u,vu, v,表示 uuvv 是敌人关系。

输出格式

输出一行一个整数,表示本次派对的握手次数。

4 2 2
1 2
2 3
1 4
1 3
3

提示

样例 1 解释

共有 (1,2),(1,3),(1,4),(2,3),(2,4),(3,4)(1,2), (1,3), (1,4), (2,3), (2,4), (3,4) 66 对人。

  • (1,2)(1,2) 是朋友,握手。
  • (1,3)(1,3) 是敌人,不握手。
  • (1,4)(1,4) 是敌人,不握手。
  • (2,3)(2,3) 是朋友,握手。
  • (2,4)(2,4) 是陌生人,但是 1122 的朋友,也是 44 的敌人,所以不握手。
  • (3,4)(3,4) 是陌生人,但是不存在任何一个人既是 3344 之一的敌人也是另一个人的朋友,故握手。

综上,一共握手 33 次。

数据规模与约定

以下设 m=p+qm = p + q,即 mm 是朋友和敌人关系条数之和。

  • 20%20\% 的数据,保证 m=0m = 0
  • 50%50\% 的数据,保证 n,m100n, m \leq 100
  • 70%70\% 的数据,保证 n,m103n, m \leq 10^3
  • 100%100\% 的数据,保证 2n3×1042 \leq n \leq 3 \times 10^41u,vn1 \leq u, v \leq n0p,qm1030 \leq p,q \leq m \leq 10^3uvu \neq v。同一对敌人或朋友关系不会出现两次,不会有一对人同时是敌人或朋友关系。

提示

  • 本题的空间限制为 2GiB2 \mathrm{GiB}。这一空间限制意味着你可以在程序中开出不超过 2147483648(>2×109)2147483648(>2 \times 10^9) 个 bool 或 char 的数组。注意,开不下同样大小的 int 数组
  • 请注意空间限制是你程序运行时所使用的空间峰值,其中还包括了函数压栈、其他变量等空间占用。所以请不要卡着上限开数组。
  • 如果你开出了过大的数组,可能会导致编译错误。此时请酌情减小你的数组大小。
  • 对于某些 32 位系统,或可用内存过少的系统,直接开出大小约为 2GB 的数组可能无法编译或无法运行。可以先把数组开小来测试样例,提交时再改回符合数据范围的数组,也可以使用洛谷在线 IDE 来测试样例。洛谷评测机保证可以正常评测。