QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#725389#9530. A Game On Treewht11Compile Error//C++143.5kb2024-11-08 17:26:162024-11-08 17:26:17

Judging History

This is the latest submission verdict.

  • [2024-11-08 17:26:17]
  • Judged
  • [2024-11-08 17:26:16]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
namespace modnum_space
{
    typedef long long ll;
    const ll pmod = 998244353;
    struct modnum;
    modnum inv(modnum a);
    ll exgcd(ll a, ll b, ll &x, ll &y);
    modnum qpow(modnum a, modnum b, modnum p);

    struct modnum
    {
        ll val;
        modnum() { val = 0; }
        modnum(ll a) { val = (a % pmod + pmod) % pmod; }
        modnum(int a) { val = (a % pmod + pmod) % pmod; }
        friend modnum operator+(const modnum &a, const modnum &b) { return (a.val + b.val) % pmod; }
        friend modnum operator-(const modnum &a, const modnum &b) { return (a.val - b.val + pmod) % pmod; }
        friend modnum operator*(const modnum &a, const modnum &b) { return (a.val * b.val) % pmod; }
        friend modnum operator/(const modnum &a, const modnum &b) { return (a.val * inv(b.val)).val % pmod; }
        friend modnum &operator+=(modnum &a, const modnum &b) { return a = a + b; }
        friend modnum &operator-=(modnum &a, const modnum &b) { return a = a - b; }
        friend modnum &operator*=(modnum &a, const modnum &b) { return a = a * b; }
        friend modnum &operator/=(modnum &a, const modnum &b) { return a = a / b; }
    };

    modnum inv(modnum a)
    {
        ll x, y;
        exgcd(a.val, pmod, x, y);
        x = (x % pmod + pmod) % pmod;
        return x;
    }
    modnum qpow(modnum a, ll b)
    {
        modnum ans = 1;
        for (; b; b >>= 1, a *= a)
            if (b & 1)
                ans *= a;
        return ans;
    }
    ll exgcd(ll a, ll b, ll &x, ll &y)
    {
        if (b == 0)
        {
            return x = 1, y = 0, a;
        }
        ll d = exgcd(b, a % b, x, y);
        ll z = x;
        x = y;
        y = z - (a / b) * y;
        return d;
    }

#ifdef _GLIBCXX_IOSTREAM
    std::istream &operator>>(std::istream &cin, modnum &a)
    {
        cin >> a.val;
        a.val %= pmod;
        return cin;
    }
    std::ostream &operator<<(std::ostream &cout, modnum a)
    {
        cout << a.val;
        return cout;
    }
#endif
}
using namespace modnum_space;
int t = 1;
int n1;

vector<int> G[N];
modnum ans = 0;
modnum siz[N], sum[N];
modnum n;
void dfs(int u, int fa)
{
    siz[u] = 1;
    for (auto v : G[u])
    {
        if (v == fa)
            continue;
        dfs(v, u);
        siz[u] = siz[u] + siz[v];
        ans = ans + (2 * sum[v] * sum[u]); // 公共边的一段在子树v中,另一端在另一个子树中,但最近公共祖先是u
        sum[u] = sum[u] + sum[v];
        ans = ans + 2 * (n - siz[v]) * (n - siz[v]) * (sum[v] - siz[v] * siz[v]); // 公共边的一段以u为起点,另一端在子树v中
    }
    ans = ans + (siz[u] * siz[u] * (n - siz[u]) * (n - siz[u]));
    sum[u] = sum[u] + (siz[u] * siz[u]);
    return;
}
void solve()
{
    cin >> n1;
    n = modnum(n1);
    for (int i = 1; i < n1; i++)
    {
        int u, v;
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    ans = 0;
    int num1 = n1 * (n1 - 1) % mod / 2 % mod;
    modnum num = modnum(num1);
    num = num * num;
    num = inv(num);
    dfs(1, 0);
    int num2 = ans * num;
    cout << num2 << "\n";
    for (int i = 1; i <= n1; i++)
    {
        sum[i] = 0, siz[i] = 0,
        G[i].clear();
    }
    return;
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> t;
    while (t--)
        solve();
    return 0;
}

详细

answer.code: In function ‘void solve()’:
answer.code:108:32: error: ‘mod’ was not declared in this scope; did you mean ‘modf’?
  108 |     int num1 = n1 * (n1 - 1) % mod / 2 % mod;
      |                                ^~~
      |                                modf
answer.code:113:20: error: cannot convert ‘modnum_space::modnum’ to ‘int’ in initialization
  113 |     int num2 = ans * num;
      |                ~~~~^~~~~
      |                    |
      |                    modnum_space::modnum