| 比赛 | 
    CSP2023-S模拟赛 | 
    评测结果 | 
    AAAAAAEEEE | 
    | 题目名称 | 
    编辑题目 | 
    最终得分 | 
    60 | 
    | 用户昵称 | 
    usr10086 | 
    运行时间 | 
    1.941 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    7.47 MiB  | 
    | 提交时间 | 
    2023-10-17 21:43:56 | 
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
ifstream fin("edit.in");
ofstream fout("edit.out");
#define cin fin
#define cout fout
const int N = 2e5 + 10;
typedef long long ll;
const ll MOD = 998244353;
ll inv(ll x)
{
    ll res = 1, e = MOD - 2;
    while (e)
    {
        if (e & 1) (res *= x) %= MOD;
        (x *= x) %= MOD, e >>= 1;
    }
    return res;
}
struct E
{
    int id, to, w;
};
int n, m;
bool vis[N];
vector<E> g[N];
struct F
{
    int id, u, v, w;
};
vector<F> el;
int main()
{
    cin >> n >> m;
    el.push_back({0,0,0});
    for (int i = 1, u, v, w; i <= m; i++) cin >> u >> v >> w, el.push_back({i, u, v, w}), g[u].push_back({i, v, w}), g[v].push_back({i, u, w});
    ll ans = 0;
    ll dvd = inv(n)*inv(m)%MOD;
    for (int i = 1; i <= m; i++)
    {
        int u = el[i].u, v = el[i].v, w = el[i].w;
        queue<int> q;
        memset(vis, 0, sizeof(bool)*(n+1));
        q.push(u);
        int hasu = 0, szu = 0, hasv = 0, szv = 0;
        vis[u] = 1;
        while (!q.empty())
        {
            int k = q.front(); q.pop();
            szu++;
            for (const E& e : g[k])
            {
                if (e.id == i) continue;
                if (e.w == w) hasu = 1;
                if (!vis[e.to]) vis[e.to] = 1, q.push(e.to);
            }
        }
        if (!vis[v]) q.push(v), vis[v] = 1;
        while (!q.empty())
        {
            int k = q.front(); q.pop();
            szv++;
            for (const E& e : g[k])
            {
                if (e.id == i) continue;
                if (e.w == w) hasv = 1;
                if (!vis[e.to]) vis[e.to] = 1, q.push(e.to);
            }
        }
//        printf("added %lld/%d\n", ll(szu*hasu+szv*hasv), n*m);
        (ans += ll(szu*hasu+szv*hasv)*dvd) %= MOD;
    }
    cout << ans;
}