제출 #1323319

#제출 시각아이디문제언어결과실행 시간메모리
1323319zyntherixConstruction Project 2 (JOI24_ho_t2)C++20
53 / 100
2095 ms30172 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pi pair<int, int>
#define vi vector<int>
#define vs vector<string>
#define vb vector<bool>
#define vpi vector<pi>
#define pb push_back
#define all(a) (a).begin(), (a).end()
const int mod = 3e18;
int n, m, s, t, l, k;
const int N = 2e5 + 5;
vpi g[N];

vi dijkstra(int sc)
{
    vi dist(n + 1, mod);
    dist[sc] = 0;
    multiset<pi> ms;
    ms.insert({0, sc});
    while (ms.size())
    {
        auto [d, v] = *ms.begin();
        ms.erase(ms.begin());
        for (auto ch : g[v])
        {
            if (d + ch.second < dist[ch.first])
            {
                dist[ch.first] = d + ch.second;
                ms.insert({dist[ch.first], ch.first});
            }
        }
    }
    return dist;
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m >> s >> t >> l >> k;
    for (int i = 0; i < m; i++)
    {
        int a, b, c;
        cin >> a >> b >> c;
        g[a].pb({b, c});
        g[b].pb({a, c});
    }
    vi a = dijkstra(s);
    if (a[t] <= k)
    {
        cout << (n * (n - 1)) / 2 << '\n';
        return 0ll;
    }
    vi b = dijkstra(t);
    sort(all(a));
    sort(all(b));
    int ans = 0;
    for (int i = 0; i < a.size(); i++)
    {
        if (a[i] + l + b[0] > k)
            break;
        if (a[i] + l + b[b.size() - 1] <= k)
        {
            ans += b.size();
            continue;
        }
        int lt = 0, rt = b.size() - 1;
        while (lt + 1 < rt)
        {
            int md = (lt + rt) / 2;
            if (a[i] + l + b[md] <= k)
            {
                lt = md;
            }
            else
            {
                rt = md;
            }
        }
        ans += (lt + 1);
    }
    cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...