关于我加强版过了弱化版没过这件事
查看原帖
关于我加强版过了弱化版没过这件事
367404
Kris_hukr楼主2021/10/28 11:17

在找直径两端的时候这样写就 52 pts

std::function<void(int, int)> dfs;
dfs = [&](int x, int f) -> void {
    for (int i = head[x]; i; i = node[i].nxt) {
        int v = node[i].v, w = node[i].w;
        if (v == f) {
            continue;
        }
        dis[v] = dis[x] + w;
        if (dis[l] < dis[v]) {
            l = v;
        }
        dfs(v, x);
    }
};
dfs(1, 0);
dis[l] = 0;

dfs = [&](int x, int f) -> void {
    for (int i = head[x]; i; i = node[i].nxt) {
        int v = node[i].v, w = node[i].w;
        if (v == f) {
            continue;
        }
        dis[v] = dis[x] + w;
        pre[v] = x;
        if (dis[r] < dis[x]) {
            r = x;
        }
        dfs(v, x);
    }
};
dfs(l, 0);

这样写就 AC

std::function<void(int, int)> dfs;
dfs = [&](int x, int f) -> void {
    for (int i = head[x]; i; i = node[i].nxt) {
        int v = node[i].v, w = node[i].w;
        if (v == f) {
            continue;
        }
        dis[v] = dis[x] + w;
        dfs(v, x);
    }
};
dfs(1, 0);
dis[l] = 0;
int m = -1;
for (int i = 1; i <= n; i++) {
    if (m < dis[i]) {
        l = i;
        m = dis[i];
    }
}

dfs = [&](int x, int f) -> void {
    for (int i = head[x]; i; i = node[i].nxt) {
        int v = node[i].v, w = node[i].w;
        if (v == f) {
            continue;
        }
        dis[v] = dis[x] + w;
        pre[v] = x;
        dfs(v, x);
    }
};
dfs(l, 0);
m = -1;
for (int i = 1; i <= n; i++) {
    if (m < dis[i]) {
        r = i;
        m = dis[i];
    }
}

求问大佬为什么 qwq

2021/10/28 11:17
加载中...