Submission #1250726

#TimeUsernameProblemLanguageResultExecution timeMemory
1250726DangKhoizzzzConstruction Project 2 (JOI24_ho_t2)C++20
100 / 100
153 ms24904 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pii pair <int , int>
#define arr3 array <int , 3>

using namespace std;

const int INF = 1e17;
const int maxn = 2e5 + 7;

int n , m , S , T , K , L;
vector <pii> g[maxn];

vector <int> dijkstra(int st)
{
    vector <int> d(n , INF);
    priority_queue <pii , vector <pii> , greater <pii>> Q;
    Q.push({0 , st});
    d[st] = 0;

    while(!Q.empty())
    {
        int c = Q.top().fi;
        int u = Q.top().se;
        Q.pop();
        if(c != d[u]) continue;

        for(pii tmp: g[u])
        {
            int v = tmp.fi;
            int w = tmp.se;
            if(d[v] > d[u] + w)
            {
                d[v] = d[u] + w;
                Q.push({d[v] , v});
            }
        }
    }
    return d;
}

void solve()
{
    cin >> n >> m;
    cin >> S >> T >> L >> K;
    S--;
    T--;

    for(int i = 1; i <= m; i++)
    {
        int u , v , w; cin >> u >> v >> w;
        u--;
        v--;
        g[u].push_back({v , w});
        g[v].push_back({u , w});
    }

    vector <int> a = dijkstra(S);
    vector <int> b = dijkstra(T);

    if(a[T] <= K)
    {
        cout << n*(n-1)/2 << '\n';
        return;
    }

    sort(b.begin() , b.end());
    sort(a.begin() , a.end());

    int ans = 0;

    for(int i = 0; i < n; i++)
    {
        int j = upper_bound(b.begin() , b.end() , K - L - a[i]) - b.begin();
        ans += j;
    }
    cout << ans << '\n';
}



signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    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...