60pts,玄关,求调
查看原帖
60pts,玄关,求调
1030559
tzzl3035楼主2024/10/10 23:29

P1351, 60pts, 求调

#include <bits/stdc++.h>
int main() 
{
  std::ios::sync_with_stdio(0);
  std::cin.tie(nullptr);

    int n; std::cin >> n;
    std::map<int, std::vector<int>> mp;
    for(int i = 1; i < n; ++i) 
    {
        int u, v; std::cin >> u >> v;
        mp[u].push_back(v);
        mp[v].push_back(u);
    }
    std::vector<int> W(n+3);
    for(int i = 1; i <= n; ++i) 
    {
        std::cin >> W[i];
    }
    int ans1 = 0, ans2 = 0;
    const int MOD = 1e4 + 7;
    for(int i = 1; i <= n; ++i) 
    {
        int t1, t2, m1=0, m2=0;
        t1=0, t2=0;
        for(int j: mp[i]) 
        {
            if(W[j] > m1) m2 = m1, m1 = W[j];
            else if(W[j] > m2) m2 = W[j];
            t1 = (t1 + W[j]) % MOD, 
            t2 = (t2 + W[j]*W[j]) % MOD;
        }
        ans1 = std::max(ans1, m1 * m2);
        t1 = (1ll * t1 * t1) % MOD;
        ans2 = (ans2 + (t1 - t2)) % MOD;
    }
    std::cout << ans1 << ' ' << ans2;
    

  return 0;
}
2024/10/10 23:29
加载中...