关注
第三题这样暴力dfs能AC?我是先对权值排序再dfs,标记走过的节点做优化,只过了20%
#include <cstdio>
(802)#include <cstring>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
const int N = 100010, M = N * 2;
int h[N], e[M], ne[M], idx;
int w[N];
PII node[N];
bool st[N];//标记走过的,以此处为头必不可能为最长路径
int n;
int ans = 1;
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
void dfs(int u, int s)
{
st[u] = true;
ans = max(ans, s);
for (int i = h[u]; ~i; i = ne[i])
{
int j = e[i];
if (!st[j] && w[j] > w[u]) dfs(j, s + 1);
}
}
int main()
{
memset(h, -1, sizeof h);
scanf("%d", &n);
// 记录点权
for (int i = 1; i <= n; i ++)
{
scanf("%d", &w[i]);
node[i] = {w[i], i};
}
// 建图
for (int i = 0; i < n - 1; i ++)
{
int u, v;
scanf("%d%d", &u, &v);
add(u, v), add(v, u);
}
// 给点权排序
sort(node, node + n);
// 遍历树
for (int i = 1; i <= n; i ++)
{
if (!st[node[i].second]) dfs(node[i].second, 1);
}
printf("%d\n", ans);
return 0;
}
查看原帖
1 1
相关推荐
牛客热帖
更多
正在热议
更多
# 春招什么时候投? #
11291次浏览 188人参与
# 牛友的春节生活 #
8656次浏览 172人参与
# 春节前,你还在投简历吗? #
14980次浏览 175人参与
# 从夯到拉,锐评职场mentor #
5671次浏览 86人参与
# 牛客AI体验站 #
15050次浏览 268人参与
# 备战春招/暑实,现在应该做什么? #
5674次浏览 170人参与
# 春节提前走,你用什么理由请假? #
11167次浏览 253人参与
# 实习到现在,你最困惑的一个问题 #
4944次浏览 140人参与
# 怎么给家人解释你的工作? #
51627次浏览 208人参与
# 工作后,你落下了哪些病根 #
32472次浏览 277人参与
# 面试经验谈 #
406599次浏览 7218人参与
# 没有家庭托举的我是怎么找工作的 #
35762次浏览 266人参与
# 机械制造秋招总结 #
103394次浏览 886人参与
# 上班摸鱼,你都在干些什么? #
39187次浏览 246人参与
# 今年秋招你收到了多少封邮件? #
37824次浏览 279人参与
# 距离春招还有一个月,你现在是什么开局? #
7583次浏览 121人参与
# xxx岗位的一天 #
44986次浏览 279人参与
# 暑期实习什么时候投? #
7734次浏览 180人参与
# 聊聊Agent开发 #
26598次浏览 621人参与
# 找工作,行业重要还是岗位重要? #
96558次浏览 1839人参与
