AT_abc213_d [ABC213D] Takahashi Tour 题解

题目传送门

题目大意

给定一个 n n n 个点的无向图,从根节点 1 1 1 开始,按照以下遍历规则遍历:

  1. 如果这个点所能到达的点中有没有遍历过的,那么就按照编号的从小到大的顺序遍历。

  2. 否则,那么:

    • 如果此点为 1 1 1,结束遍历。
    • 否则回溯到上一点。

请你按照遍历顺序输出到达过的点的编号。

解题思路

我们肯定得存储这个无向图对吧,于是就用到了 vector 容器。题目要求按照编号的递增顺序进行遍历对吧,所以就把每个节点的子节点都给 sort 排下序。题目说如果这个点的子节点中有没被遍历过的就遍历,都遍历过了就回溯对吧,所以我们直接 dfs 爆搜,输出一下当前节点的编号,遍历子节点,打标记,然后我们就会惊奇地发现这题居然如此简单。

如果不会建图的话,我就讲一下(会的神犇可以跳过)。

首先 vector 可以理解为一个动态数组,而 vector<int> a[200010] 就是定义一个二维数组,a[1].push_back(2) 就是将 2 2 2 添加在了编号为 1 1 1 的序列中,因此我们使用 vector 建图的时候,a[1].push_back(2) 就可以理解为 1 1

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值