제출 #1324437

#제출 시각아이디문제언어결과실행 시간메모리
1324437mantaggezConstruction Project 2 (JOI24_ho_t2)C++20
0 / 100
11 ms3868 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using pii = pair<ll, ll>;

const int nx = 2e5+5;
const ll INF = 1e18;

ll n, m, s, t, l, k, res;
vector<ll> distS(nx, INF), distT(nx, INF);
vector<pii> adj[nx];
priority_queue<pii, vector<pii>, greater<pii>> pq;

void dijkstra(ll src, vector<ll>& dist)
{
    dist[src] = 0;
    pq.push({0, src});
    while(!pq.empty())
    {
        auto [cw, u] = pq.top();
        pq.pop();
        for(auto [v, nw] : adj[u])
        {
            if(dist[v] > dist[u] + nw)
            {
                dist[v] = dist[u] + nw;
                pq.push({dist[v], v});
            }
        }
    }
}

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin >> n >> m;
    cin >> s >> t >> l >> k;
    for(int i=0;i<m;i++)
    {
        ll u, v, w;
        cin >> u >> v >> w;
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }

    dijkstra(s, distS);
    dijkstra(t, distT);

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(distS[i] == INF || distT[j] == INF) continue; 
            
            ll d = distS[i] + l + distT[j];
            if(d <= k) {
                // cout << i << ' ' << j << '\n';
                res++;
            }
        }
    }

    cout << res ;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...