70分TLE求助
查看原帖
70分TLE求助
640304
ThreeTB楼主2022/12/3 21:56
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
typedef int ll;
const ll  N = 6000, M = 1e6;
typedef pair<ll, ll >PII;
ll  n, m, t;
ll  head[N], e[M], en[M], idx = 0, w[M];
int dist[N];
priority_queue<PII>q;
int res = 0;
void add(ll  a, ll  b, ll  c)
{
    e[idx] = b, w[idx] = c, en[idx] = head[a], head[a] = idx++;
}
void   cal(ll  x)
{
    memset(dist, 0x3f, sizeof dist);
    dist[x] = 0;
    q.push({ 0,x });
    while (q.size())
    {
        auto t = q.top();
        q.pop();
        ll  ver = t.second;
        ll  distance = t.first;
        for (ll i = head[ver]; ~i; i = en[i])
        {
            ll  j = e[i];
            if (dist[j] > distance + w[i])
            {
                dist[j] = distance + w[i];
                q.push({ dist[j],j });
            }
        }
    }
}
int main()
{
    memset(head, -1, sizeof head);
       scanf("%d %d", &n, &m);
    for (ll i = 1; i <= m; i++)
    {
        ll  a, b, c;
       scanf("%d %d %d", &a, &b, &c);
        add(a, b, c);
        add(b + n, a + n, c);
    }
    ll ans = 0;
    cal(1);
    for (ll i = 2; i <= n; i++) ans += dist[i];
    cal(1 + n);
    for (ll i = 2 + n; i <= n + n; i++)  ans += dist[i];
    cout << ans << endl;
    return 0;
}
2022/12/3 21:56
加载中...