| 比赛 |
2025.10.24 |
评测结果 |
AAAAAATAAA |
| 题目名称 |
编辑题目 |
最终得分 |
90 |
| 用户昵称 |
wdsjl |
运行时间 |
5.340 s |
| 代码语言 |
C++ |
内存使用 |
70.05 MiB |
| 提交时间 |
2025-10-24 10:16:53 |
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
const int N = 1e6 + 5;
const int L = 1e6 + 5;
struct E {
int u, v, w;
} e[L];
struct A {
int t, i, n;
} a[2 * L];
int h[N], c = 0;
int d[N], l[N], o[N], s[N], t;
bool ce[L];
int cc[L];
int n, m;
void ade(int u, int v, int id) {
c++;
a[c].t = v;
a[c].i = id;
a[c].n = h[u];
h[u] = c;
}
void tj(int u, int pe) {
d[u] = l[u] = ++t;
s[u] = 1;
for (int i = h[u]; i; i = a[i].n) {
int v = a[i].t, id = a[i].i;
if (id == pe) continue;
if (!d[v]) {
tj(v, id);
s[u] += s[v];
if (l[v] > d[u]) {
ce[id] = 1;
cc[id] = v;
}
l[u] = min(l[u], l[v]);
} else {
l[u] = min(l[u], d[v]);
}
}
o[u] = t;
}
int inv(int x) {
int r = 1, e = mod - 2;
while (e > 0) {
if (e % 2) r = r * x % mod;
x = x * x % mod;
e /= 2;
}
return r;
}
signed main() {
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
scanf("%lld%lld", &n, &m);
for (int i = 0; i < m; i++) {
int u, v, w;
scanf("%lld%lld%lld", &u, &v, &w);
e[i] = {u, v, w};
ade(u, v, i);
ade(v, u, i);
}
t = 0;
memset(d, 0, sizeof(d));
memset(l, 0, sizeof(l));
memset(ce, 0, sizeof(ce));
tj(1, -1);
unordered_map<int, vector<int>> ew;
for (int i = 0; i < m; i++) {
ew[e[i].w].push_back(i);
}
int tot = 0;
for (int i = 0; i < m; i++) {
int w = e[i].w;
auto& v = ew[w];
int cw = v.size();
if (!ce[i]) {
if (cw > 1) {
tot = (tot + n) % mod;
}
} else {
if (cw == 1) continue;
int vv = cc[i], sa = s[vv], sb = n - sa;
int a = 0, b = 0;
for (int id : v) {
if (id == i) continue;
E& ed = e[id];
int u = ed.u, vvv = ed.v;
bool inA_u = d[vv] <= d[u] && d[u] <= o[vv];
bool inA_v = d[vv] <= d[vvv] && d[vvv] <= o[vv];
if (inA_u && inA_v) a = 1;
if (!inA_u && !inA_v) b = 1;
if (a && b) break;
}
tot = (tot + 1LL * a * sa + 1LL * b * sb) % mod;
}
}
int mu = (1LL * m * n) % mod;
int id = inv(mu);
int ans = (tot * id) % mod;
cout << ans << endl;
return 0;
}