#B. 【模板】邻接表

    传统题 2000ms 128MiB

【模板】邻接表

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

Description

注:本题与【模板】邻接矩阵区别在于 $n,m$ 范围不同和操作 2 的次数不同。

用邻接矩阵维护一个有 $n$ 个点的图,支持以下四种操作:

    $1.$ 在 $a,b$ 间连边。

    $2.$ 在 $a,b$ 间删边。

    $3.$ 判断 $a,b$ 之间是否存在边。

    $4.$ 输出和 $a$ 之间有边的点。

共进行 $m$ 操作,对于每个 $3,4$ 操作,输出相应的结果。

保证操作 $2$ 的次数不超过 $10$ 次。

Input Format

第一行一个整数 $m$ 表示操作次数。

接下来 $m$ 行,每行包含一个操作命令,操作命令可能是以下几种:

    $1.$ a a b,在 $a,b$ 间连边。

    $2.$ d a b,在 $a,b$ 间删边。

    $3.$ c a b,判断 $a,b$ 之间是否存在边。

    $4.$ q a,输出和 $a$ 之间有边的点。

Output Format

对于每个操作 $3,4$ 输出一行或两行表示一个结果,对于操作 $3$,如果 $a,b$ 之间存在边,一行输出 Yes,否则输出 No;对于操作 $4$,第一行先输出和 $a$ 之间有边的点的个数,第二行按连边的先后顺序输出所有和 $a$ 之间有边的点。
6
a 1 2
a 2 3
c 2 3
c 1 3
d 1 2
q 1
Yes
No
0

Hint

$1≤n≤10^6,1≤m≤\min\{10^6,\dfrac{n(n-1)}{2}\}$

方法一:

vector<int> a;

末尾添加元素:a.push_back(x);

删除末尾元算:a.pop_back();

获取长度:a.size();

查找元素:find(a.begin(),a.end(),x);

元素删除:a.erase(a.begin()+下标);

遍历/访问:1、可以通过下标遍历

2、通过迭代器遍历vector<int>::iterator it;for(it=a.begin();it!=a.end();it++){//遍历cout<<*it<<" ";}

方法二:链式前向星(数组模拟邻接表)

Source

模板

2023龙游暑假第一期下午第一次课0703

未参加
状态
已结束
规则
ACM/ICPC
题目
6
开始于
2023-7-3 13:00
结束于
2023-7-4 17:00
持续时间
28 小时
主持人
参赛人数
5