QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#725389 | #9530. A Game On Tree | wht11 | Compile Error | / | / | C++14 | 3.5kb | 2024-11-08 17:26:16 | 2024-11-08 17:26:17 |
Judging History
This is the latest submission verdict.
- [2024-11-08 17:26:17]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [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