250942026-02-17 21:26:04KevinBarátnők (50 pont)cpp17Hibás válasz 2/501.09s5068 KiB
#include <bits/stdc++.h>
#include <queue>
using namespace std;
using ll=long long;
using pll=pair<ll, ll>;
const ll MOD=1e9+7;

ll a, b;
vector<vector<pll>> vec;
priority_queue<pll, vector<pll>, greater<pll>> pq;
vector<ll> dis;
set<pll> s;

/*
ll fastPow(ll a, ll b){
    if (b==0) return 1;
    if (a==1) return 1;
    if (b%2==0) return fastPow(a*a%MOD, b/2);
    else return fastPow(a, b-1)*a%MOD;
}
*/

void dfs(ll x, pll tala){
    for (auto& z:vec[x]){
        if (dis[z.first]==dis[x]+z.second){
            if (z.first==b){
                s.insert(tala);
                //cerr << tala.first << ' ' << tala.second << '\n';
                return;
            }
            if (dis[b]%2==0 && dis[b]/2==dis[z.first]) tala={z.first, z.first};
            else if (dis[x]<(dis[b]+1)/2 && (dis[b]-1)/2<=dis[z.first]) tala={x, z.first};
            dfs(z.first, tala);
        }
    }
}

int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    ll n, m; cin >> n >> m;
    vec.resize(n);
    dis.resize(n, INT_MAX);
    for (ll i=0; i<n; i++){
        ll a, b, c; cin >> a >> b >> c;
        vec[a-1].push_back({b-1, c});
        vec[b-1].push_back({a-1, c});
    }
    cin >> a >> b; a--; b--;
    dis[a]=0;
    pq.push({0, a});
    while (pq.size()>0){
        pll x=pq.top();
        pq.pop();
        if (dis[x.second]==x.first){
            for (auto& z:vec[x.second]){
                if (dis[z.first]>dis[x.second]+z.second){
                    dis[z.first]=dis[x.second]+z.second;
                    pq.push({dis[z.first], z.first});
                }
            }
        }
    }
    dfs(a, {-1, -1});
    cout << s.size()%MOD*(s.size()-1)%MOD;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/50
1Elfogadva0/01ms508 KiB
2Hibás válasz0/029ms4404 KiB
3Hibás válasz0/21ms316 KiB
4Hibás válasz0/21ms316 KiB
5Hibás válasz0/21ms316 KiB
6Hibás válasz0/21ms316 KiB
7Hibás válasz0/21ms316 KiB
8Futási hiba0/126ms4596 KiB
9Időlimit túllépés0/21.085s5068 KiB
10Hibás válasz0/257ms4728 KiB
11Hibás válasz0/227ms4404 KiB
12Időlimit túllépés0/21.09s4852 KiB
13Hibás válasz0/2172ms4404 KiB
14Hibás válasz0/227ms4404 KiB
15Hibás válasz0/226ms4404 KiB
16Elfogadva1/139ms4652 KiB
17Elfogadva1/143ms4660 KiB
18Futási hiba0/127ms4680 KiB
19Hibás válasz0/228ms4532 KiB
20Hibás válasz0/243ms4916 KiB
21Hibás válasz0/243ms4660 KiB
22Hibás válasz0/226ms3636 KiB
23Hibás válasz0/229ms4588 KiB
24Hibás válasz0/228ms3636 KiB
25Hibás válasz0/217ms2100 KiB
26Hibás válasz0/237ms4660 KiB
27Hibás válasz0/246ms4788 KiB
28Hibás válasz0/237ms4744 KiB
29Hibás válasz0/239ms3860 KiB