241562026-02-05 08:22:02abcdBarátnők (50 pont)cpp17Hibás válasz 2/50252ms8664 KiB
#include <bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
using ll=long long;

const int maxn=50005,z=INT_MAX,M=1e9+7;
vector<int> dd(maxn+1,z),dn(maxn+1,z),cd(maxn+1),cn(maxn+1);
vector<pii> adj[maxn+1];

void dijkstra(set<pii>& s,vector<int>& d,vector<int>& c){
    while(!s.empty()){
        auto [vw,v]=*s.begin();
        s.erase(s.begin());
        if(vw!=d[v])continue;
        for(auto[to,w]:adj[v]){
            if(d[to]>d[v]+w) {
                d[to]=d[v]+w;
                c[to]=c[v];
                s.insert({d[to],to});  
            }else if(d[to]==d[v]+w) {
                c[to]+=c[v];
            }
        }
    }
}

int main(){
    int n,m;cin>>n>>m;
    for(int i=0;i<m;i++){
        int a,b,c;cin>>a>>b>>c;
        adj[a].push_back({b,c});
        adj[b].push_back({a,c});
    }
    int dor,nor;cin>>dor>>nor;
    set<pii> s;
    s.insert({0,dor});
    dd[dor]=0;dn[nor]=0;
    cd[dor]=1;cn[nor]=1;
    dijkstra(s,dd,cd);
    set<pii> s2;
    s2.insert({0,nor});
    dijkstra(s2,dn,cn);
    int x=dd[nor];
    ll ans=1LL*cd[nor]*cd[nor];
    ll no=0;
    for(int i=1;i<=n;i++){
        if(dd[i]==x/2&&dn[i]==x/2)
            no=(no+1LL*cd[i]*cn[i]%M*cd[i]*cn[i]%M)%M;
    }
    for(int u=1;u<=n;u++){
        for(auto [v,w]:adj[u]){
            if(dd[v]+w+dn[u]==x&&abs(dd[v]-dn[u])<=w)
                no=(no+1LL*cd[v]*cn[u]%M*cd[u]*cn[u]%M)%M;
        }
    }
    cout<<(abs(ans-no))%M<<'\n';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/50
1Elfogadva0/03ms2356 KiB
2Hibás válasz0/0252ms8336 KiB
3Hibás válasz0/24ms2356 KiB
4Hibás válasz0/24ms2360 KiB
5Hibás válasz0/23ms2356 KiB
6Hibás válasz0/24ms2436 KiB
7Hibás válasz0/24ms2356 KiB
8Elfogadva1/185ms4628 KiB
9Hibás válasz0/2151ms8664 KiB
10Hibás válasz0/2148ms6868 KiB
11Hibás válasz0/2146ms6708 KiB
12Hibás válasz0/2160ms7868 KiB
13Hibás válasz0/2146ms6708 KiB
14Hibás válasz0/2140ms6708 KiB
15Hibás válasz0/2140ms6708 KiB
16Hibás válasz0/1184ms7728 KiB
17Hibás válasz0/1182ms7732 KiB
18Elfogadva1/186ms4916 KiB
19Hibás válasz0/2190ms7988 KiB
20Hibás válasz0/2177ms7740 KiB
21Hibás válasz0/2180ms7736 KiB
22Hibás válasz0/2180ms8292 KiB
23Hibás válasz0/2192ms8244 KiB
24Hibás válasz0/2168ms8500 KiB
25Hibás válasz0/2152ms7716 KiB
26Hibás válasz0/2164ms7696 KiB
27Hibás válasz0/2181ms7732 KiB
28Hibás válasz0/2179ms8424 KiB
29Hibás válasz0/2177ms7692 KiB