WA 50pts 警示后人
查看原帖
WA 50pts 警示后人
427623
XiaoQuQu楼主2022/11/8 21:06

注意,如果你是统计无须数对和,在最后乘二,千万别忘记再次取模。

#include <bits/stdc++.h>
using namespace std;

#define endl '\n'
#define int long long
#define lson (p << 1)
#define rson ((p << 1) | 1)
#define mid ((l + r) >> 1)

const int MAXN = 2e6 + 5, mod = 10007;
vector<int> G[MAXN];
int n, w[MAXN], s = 0, mx = -0x7f7f7f7f;

void dfs(int x, int fa, int fa2) {
    s = (s + w[x] * w[fa2]) % mod;
    mx = max(mx, w[x] * w[fa2]);
    // cout << x << ' ' << fa << ' ' << fa2 << ' ' << s << endl;
    int sum = 0, lsmax = 0;
    for (auto u:G[x]) {
        if (u == fa) continue;
        dfs(u, x, fa);
        s = (s + w[u] * sum) % mod;
        mx = max(mx, w[u] * lsmax); 
        sum = sum + w[u];
        lsmax = max(lsmax, w[u]);
    }
}

signed main(void) {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for (int i = 1; i < n; ++i) {
        int u, v;
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    for (int i = 1; i <= n; ++i) cin >> w[i];
    dfs(1, 0, 0);
    cout << mx << ' ' << s * 2 % mod << endl; // 这里
    return 0;
}
2022/11/8 21:06
加载中...