交互题
(输出传给电脑,电脑回应答案用输入传来)
多叉树的建立(dfs板子,无向)
Monarchy in Vertigo( dfs 序 )
BFS
链式向前星
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
依次加入三条有向边 2->5,2->4, 2->6; 那么遍历时的路径:h[2] -> 6 -> 4 -> 5 -> -1;
idx记录的是边,每增加一条边,idx++,(注意的是idx下标从零开始,所以总共idx条边,但是最后一条边的编号应该是idx-1)
ne[]用来存储顺序,h[]只存储当前头节点第一个idx值。所以不会引起下标冲突。
e[i]存储的是,下标是i的这条边,它的终点是b
e[idx] = b; 记录 加入的边 的终点节点
ne[idx] = h[a]; h[a] 表示 节点 a 为起点的第一条边的下标,ne[idx] = h[a] 表示把 h[a] 这条边接在了 idx 这条边的后面,
其实也就是把 a 节点的整条链表 接在了 idx 这条边 后面;目的就是为了下一步 把 idx 这条边 当成 a 节点的单链表的 第一条边,
完成把最新的一条边插入到 链表头的操作;
h[a] = idx++; a节点开头的第一条边置为当前边,idx移动到下一条边
一个环
找出一个环,并依次存下这个环上的点
见面礼 - CSG 1242 - Virtual Judge (vjudge.net)
Tarjan
Locking Doors - Gym 104790L - Virtual Judge (vjudge.net)
题意应该是,每个房间最多上一次锁。题解:solutions-web.pdf (codeforces.com)
康托展开
-------------------------------------------------------------------------------
对于无向树,只需要记录父节点防止往回跑,不需要额外开bool判断。
对于有环的图dfs时才需要bool来判断防止跑重复,这时候没有题目需要的话不用记录父节点