Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34587 LYLAKIOIAKIOI 【S】T2 C++ 解答错误 0 160 MS 14056 KB 1767 2024-11-12 12:38:17

Tests(0/11):


#include<bits/stdc++.h> #define pii pair<int,int> #define fi first #define se second #define mk make_pair #define ll long long using namespace std; const int N=1e5+9,mod=1e9+7; vector<pii> E[N]; int t,now,tp=0; bool vis[N]; int d[N];priority_queue<pii> q; int n,m; void dij(){ for(int i=1;i<=n;i++) d[i]=0x3f3f3f3f; d[1]=0;q.push(mk(0,1)); while(!q.empty()){ pii p=q.top();q.pop(); int w1=-p.fi,u=p.se; if(vis[u]) continue; vis[u]=1; for(auto ed:E[u]){ int v=ed.fi,w2=ed.se; if(vis[v]) continue; if(w1+w2<d[v]) d[v]=w1+w2,q.push(mk(-d[v],v)); } } }ll f[N],s[N],sq[N]; int seq[N]; bool cmp(int a,int b){ return d[a]<d[b]; } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int u,v,w;cin>>u>>v>>w; E[u].push_back(mk(v,w)); E[v].push_back(mk(u,w)); }dij(); for(int i=1;i<=n;i++) seq[i]=i;sort(seq+1,seq+n+1,cmp); //for(int i=1;i<=n;i++) cout<<d[i]<<' ';cout<<endl; f[1]=1; for(int i=1;i<=n;i++){ int u=seq[i]; for(auto ed:E[u]){ int v=ed.fi,w=ed.se; if(d[u]+w==d[v]){ //cout<<u<<' '<<v<<endl; f[v]+=f[u]; s[v]+=s[u]+f[u]; sq[v]+=sq[u]+s[u]+s[u]+f[u]; f[v]%=mod; s[v]%=mod; sq[v]%=mod; } } }ll ans=0; for(int i=1;i<=n;i++){ //cout<<d[i]<<' '<<f[i]<<' '<<s[i]<<' '<<sq[i]<<endl; ans+=1ll*(s[i]*s[i]%mod-sq[i]+mod)*((mod+1)/2)%mod; ans+=mod; }cout<<ans%mod; return 0; } //freopen("bobonut.in","r",stdin); //freopen("bobonut.out","w",stdout);


测评信息: