50分,求助
查看原帖
50分,求助
556281
qianwanlang楼主2025/1/14 17:56

#5,#7-#10 WA

代码:

#include <iostream>
#include <queue>
using namespace std;

const int nr = 1e3 + 5, mr = 1e5 + 5;
int n, m, ans;
int dis[nr];
bool vis[nr];

struct node
{
    int a;
};

bool operator< (node p, node q)
{
    return dis[p.a] > dis[q.a];
}

struct graph
{
    int cnt;
    int head[nr], nxt[mr], to[mr], len[mr];
    
    graph()
    {
        cnt = 0;
        for (int i = 0; i < nr; i++)
        {
            head[i] = 0;
        }
    }
    
    void add(int u, int v, int w)
    {
        to[++cnt] = v;
        len[cnt] = w;
        nxt[cnt] = head[u];
        head[u] = cnt;
    }
    
    void dijkstra()
    {
        for (int i = 1; i <= n; i++)
        {
            dis[i] = 2e9;
            vis[i] = 0;
        }
        priority_queue<node> q;
        dis[1] = 0;
        node tmp;
        tmp.a = 1;
        q.push(tmp);
        while (!q.empty())
        {
            int x = q.top().a;
            q.pop();
            if (vis[x])
            {
                continue;
            }
            vis[x] = 1;
            for (int i = head[x]; i; i = nxt[i])
            {
                int y = to[i], w = len[i];
                if (dis[x] + w < dis[y])
                {
                    dis[y] = dis[x] + w;
                    node tmp2;
                    tmp2.a = y;
                    q.push(tmp2);
                }
            }
        }
    }
} g1, g2;

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int u, v, w;
        cin >> u >> v >> w;
        g1.add(u, v, w);
        g2.add(v, u, w);
    }
    g1.dijkstra();
    for (int i = 2; i <= n; i++)
    {
        ans += dis[i];
    }
    g2.dijkstra();
    for (int i = 2; i <= n; i++)
    {
        ans += dis[i];
    }
    cout << ans;
    return 0;
}
2025/1/14 17:56
加载中...