用并查集维护,并记录之前是否形成过基环树。
对于每次建立连接的操作,判断节点 u 和节点 v 是否已经连通:
- 如果已经连通,并且连通块之前没有形成过基环树,则该连通块中添加这条边满足条件输出
Yes。
- 如果不连通,则将 u 和 v 所在的连通块合并。
AC代码
P1826.第3题-小红的林地
小红的林地
问题描述
小红想在 n 个节点间建立通道,并询问每次添加通道后,所连接的两个节点是否属于形成基环树的连通块。基环树定义为具有 n 个节点和 n 条边的无向连通图,不包含重边和自环。
输入格式
第一行包含两个正整数 n 和 m,n 代表节点数量,m 代表小红计划建立的通道数量。
接下来 m 行,每行输入两个正整数 u 和 v,代表建立的通道连接节点 u 和节点 v。
输出格式
对于每次建立的通道,输出一行结果。如果节点 u 和节点 v 所在的连通块形成了一棵基环树,则输出 Yes,否则输出 No。
样例输入
5 5
1 2
1 3
2 3
4 5
4 5
样例输出
No
No
Yes
No
No
评测数据与规模
- 1≤n,m≤105
- 1≤u,v≤n
- u=v