L2-031 深入虎穴 (25 分)
原题连接
题意
找最深层的叶子节点
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oLZwlS8w-1650437147098)(L2-031%20%E6%B7%B1%E5%85%A5%E8%99%8E%E7%A9%B4%20(25%20%E5%88%86)].assets/image-20220420143918776.png)](https://i-blog.csdnimg.cn/blog_migrate/bf30e8f22eafdea82e261c33a58d423d.png)
思路
根据题意,第i行的点的父节点是i,那么就可以根据这种方案建图。每行的数都是i的子节点。
坑点
需要手动找一遍没有出现过的点做头结点
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<int> g[N];
int res[N];
void dfs(int u, int cnt)//当前在那个点,当前点在第几层
{
res[u] = cnt;
for (int i = 0; i < g[u].size(); i ++ )
{
int j = g[u][i];
dfs(j, cnt + 1);
}
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i ++ )
{
int k; cin >> k;
for (int j = 0; j < k; j ++ )
{
int x; cin >> x;
res[x] = 1;//记录点出现过
g[i].push_back(x);//存点
}
}
int h;//找头结点
for (int i = 1; i <= n; i ++ )
{
if (!res[i])
{
h = i;
break;
}
}
dfs(h, 1);
int maxn = 0;
int ans = 0;
for (int i = 1; i <= n; i ++ )
{
if (res[i] > maxn)//找最大值的点
{
maxn = res[i];
ans = i;
}
}
cout << ans ;
return 0;
}

1597

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



