1 条题解

  • 0
    @ 2025-4-4 14:35:25
    #include <bits/stdc++.h>
    using namespace std;
    const int INF = 2147483647;
    const int MAXN = 1000;
    const int MAXM = 100000;
    int n, m;
    // 正图 0、反图 1,实际上 [2][MAXN+5] 可能会更快一点
    vector<pair<int, int>> e[MAXN + 5][2];
    int dis[MAXN + 5][2];
    bool vis[MAXN + 5];
    priority_queue<pair<int, int>> pq;
    void dijkstra(int s, int typ)
    {
        for (int i = 1; i <= n; i++)
        {
            dis[i][typ] = INF;
            vis[i] = false;
        }
        dis[s][typ] = 0;
        pq.push({-0, s});
        while (!pq.empty())
        {
            int u = pq.top().second;
            pq.pop();
            if (vis[u])
                continue;
            vis[u] = true;
            for (int i = 0; i < e[u][typ].size(); i++)
            {
                int v = e[u][typ][i].first;
                int w = e[u][typ][i].second;
                if (dis[u][typ] + w < dis[v][typ])
                {
                    dis[v][typ] = dis[u][typ] + w;
                    pq.push({-dis[v][typ], v});
                }
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n >> m;
        for (int i = 1; i <= m; i++)
        {
            int u, v, w;
            cin >> u >> v >> w;
            e[u][0].push_back({v, w});
            e[v][1].push_back({u, w});
        }
        dijkstra(1, 0);
        dijkstra(1, 1);
        int ans = 0;
        for (int i = 2; i <= n; i++)
            ans += dis[i][0] + dis[i][1];
        cout << ans;
        return 0;
    }
    
    • 1

    信息

    ID
    2422
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    14
    已通过
    8
    上传者