2015年提高组D1T2 信息传递
- 深搜
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, ans = 1e9, m; //有m个链或环
int t[N]; //信息传递对象
int a[N]; //i在第a[i]个链或环上
int idx[N]; //i是某个链或环上的第idx[i]个结点
void dfs(int u) {
int v = t[u]; //下一个结点
if (!a[v]) {
//如果未访问过
a[v] = a[u]; //属于同一个链或环
idx[v] = idx[u] + 1; //是这个链或环上的第idx[v]个结点
dfs(v);
}
else if (a[v] == a[u]) {
//说明这是一个环
ans = min(ans, idx[u] - idx[v] + 1);
}
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i ++) scanf("%d", &t[i]);
for (int i = 1; i <= n; i ++) {
if (!a[i]) {
a[i

这篇博客探讨了2015年提高组D1T2问题中关于信息传递的解决方案,主要涉及深度优先搜索(DFS)和并查集两种算法。作者通过示例代码展示了如何利用DFS寻找最小传递距离,并利用并查集优化处理环形结构,找出最短路径。同时,还介绍了2019年CSP-JT4题目中关于加工零件的最短路径问题,利用BFS寻找偶数和奇数距离的最短路径。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



