Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34655 22fhq 【S】T2 C++ 解答错误 9 129 MS 10608 KB 1457 2024-11-12 14:36:14

Tests(1/11):


#include<bits/stdc++.h> #define int long long using namespace std; int n,m; vector<pair<int,int>>e[100005]; int dis[100005],cnt[100005],sum[100005],sqrsum[100005]; bool vis[100005]; void dij(){ priority_queue<pair<int,int>>q; q.push({0,1}); for(int i=1;i<=n;i++)dis[i]=2e9,cnt[i]=0,vis[i]=0; dis[1]=sum[1]=sqrsum[1]=0,cnt[1]=1; while(q.size()){ int p=q.top().second; q.pop(); if(vis[p])continue; vis[p]=1; for(auto x:e[p]){ if(dis[x.first]>dis[p]+x.second){ dis[x.first]=dis[p]+x.second; cnt[x.first]=cnt[p]; sum[x.first]=sum[p]+cnt[p]; sqrsum[x.first]=sqrsum[p]+sum[p]+sum[p]+cnt[p]; q.push({-dis[x.first],x.first}); } else if(dis[x.first]==dis[p]+x.second){ cnt[x.first]=cnt[p]; sum[x.first]=sum[p]+cnt[p]; sqrsum[x.first]=sqrsum[p]+sum[p]+sum[p]+cnt[p]; } } } } const int mod=1e9+7; const int inv2=(mod+1)/2; signed main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int u,v,w; cin>>u>>v>>w; e[u].push_back({v,w}); } dij(); int sqr=0,sm=0; for(int i=1;i<=n;i++){ sqr+=sqrsum[i]; sm+=sum[i]; sqr%=mod; sm%=mod; } cout<<((sm*sm-sqr)%mod*inv2%mod+mod)%mod<<endl; return 0; }


测评信息: