其他分享
首页 > 其他分享> > CF1006E - Military Problem(搜索技术+图论+树/省选级)

CF1006E - Military Problem(搜索技术+图论+树/省选级)

作者:互联网

CF1006E - Military Problem(源地址自⇔CF1006E

目录

Problem

tag

⇔搜索技术、⇔图论、⇔树、⇔省选级(*1600)

题意

军队传递消息依照某种规律,如下:

现在,某个上级 \(u\) 试图将消息传递到他的第 \(v\) 个下级处,请你判断这个下级是谁。

思路

(朱老师)

非常简单的树形搜索。


(队内赛自己)

建树,然后使用搜索技术得出这棵树的DFS序和每个士兵的下级数量。

AC代码(伪代码)

void dfs(int x) {
    a[++ m] = x;//a数组储存DFS序
    flag[x] = m;
    siz[x] = 1;//子节点统计数组(包含它自己)
    For(i, V[x]) {
    	dfs(i);
    	siz[x] += siz[i];
    }
}

void solve() {
	cin >> n >> q;
	FOR(i, 2, n) {
		cin >> x;
		V[x].push_back(i);
	}
	dfs(1);
	FOR(i, 1, q) {
		cin >> x >> y;
		if(siz[x] < y)
			P(-1);
		else
			P(a[flag[x] + y - 1]);
	}
}

错误次数

(队内赛1、2,补题1)误以为DFS序的第 \(u\) 个元素就是上级 \(u\) ,导致直接计算。


文 / WIDA
2021.12.21 成文
首发于WIDA个人博客,仅供学习讨论


更新日记:
2021.12.21 成文


标签:下级,CF1006E,siz,DFS,Military,Problem
来源: https://www.cnblogs.com/WIDA/p/15717355.html