wa掉了第三点, 求教各位神犇
查看原帖
wa掉了第三点, 求教各位神犇
575850
RemainThrive楼主2022/3/3 22:38
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
// build the edge of a tree
int head[N], tot;
struct Edge{
    int to, w, next;
}e[2*N];
void add(int u, int v, int w){
    e[tot].to = v;
    e[tot].w = w;
    e[tot].next = head[u];
    head[u] = tot++;
}
int dp[N];
void dfs(int now, int fa){
    for (int i = head[now]; ~i; i = e[i].next){
        if (e[i].to != fa){
          dp[e[i].to] = dp[now]^e[i].w;
          dfs(e[i].to, now);  
        }
    }
}
//01trie 
struct Trie{
    int nex[32*N][2], cnt;
    void insert(int num){
        int p = 0;
        for (int i = 31; i >= 0; i--){
            int c = (num >> i) & 1;
            if (!nex[p][c]){
                nex[p][c] = ++cnt;
            }
            p = nex[p][c];
        }
    }
    int cmp(int num){
        int p = 0;
        int ans = 0;
        for (int i = 31; i >= 0; i--){
            int c = (num >> i) &1;
            if (nex[p][c^1]){
                ans |= (1 << i);
                p = nex[p][c^1];
            }
            else
            p = nex[p][c];
        }
        return ans;
    }
}trie;
int main(void){
    int n;
    cin >> n;
    memset(head, -1, sizeof(head));
    for (int i = 1; i <= n-1; i ++){
        int u, v, w;
        scanf("%d %d %d", &u, &v, &w);
        add(u, v, w), add(v, u, w);
    }
    int ans = 0;
    dfs(1, 0);
    for (int i = 1; i <= n-1; i++)
    trie.insert(dp[i]);
    for (int i = 1; i <= n-1; i++){
        ans = max(ans, trie.cmp(dp[i]));
    }
    cout << ans << endl;
}

代码如上, 我实在找不出啥毛病了, 我太菜了, 卡了三个小时, 要疯了。 再多请教一个问题, 求教各位大佬教教我dfs那是什么意思, 我已经好久没碰dfs了, 已经蒙了

2022/3/3 22:38
加载中...