제출 #1322636

#제출 시각아이디문제언어결과실행 시간메모리
1322636vaishakhvConstruction Project 2 (JOI24_ho_t2)C++20
0 / 100
2095 ms16688 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define eb emplace_back
const ll inf = 1e18;
const ll cap = 2e5+1;
ll n;
vector<pair<ll,ll>> adj[cap];

vector<ll> bfs(ll u) {
    vector<ll> dist(n, inf);
    queue<ll> q;
    dist[u] = 0;
    q.push(u);
    
    while (!q.empty()) {
        ll s = q.front();
        q.pop();
        for (auto [v, w] : adj[s]) {
            if (dist[v] == inf) {
                dist[v] = dist[s] + 1;
                q.push(v);
            }
        }
    }
    return dist;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    ll m, s, t, l, k;
    cin >> n >> m >> s >> t >> l >> k;
    s--; t--;  
    
    for (ll i{}; i < m; i++) {
        ll a, b, c;
        cin >> a >> b >> c;
        a--; b--;
        adj[a].eb(b, c);
        adj[b].eb(a, c);
    }
    
    vector<ll> dist_s = bfs(s);
    vector<ll> dist_t = bfs(t);
    
    ll ans = 0;
    
    if (dist_s[t] <= k) {
        ans = n * (n - 1) / 2;
    } else {
        set<pair<ll,ll>> val;
        
        for (ll u{}; u < n; u++) {
            if (dist_s[u] > 1) continue; 
            for (ll v{}; v < n; v++) {
                if (dist_t[v] > k - l - dist_s[u]) continue;
                if (u < v) val.insert({u, v});
                else if (v < u) val.insert({v, u});
            }
        }
        
        ans = val.size();
    }
    
    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...