2 条题解
-
1
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n,m,s,cnt; long long dis1[N],dis2[N],ans; bool vis[N]; vector<pair<int,int>> G1[N],G2[N]; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q; void dijkstra1(){ q.push({0,s}); while(q.size()){ int now=q.top().second; q.pop(); if(vis[now]){ continue; } vis[now]=1; for(auto it:G1[now]){ int x=it.first,y=it.second; if(dis1[x]>dis1[now]+y){ dis1[x]=dis1[now]+y; q.push({dis1[x],x}); } } } return ; } void dijkstra2(){ while(q.size()){ q.pop(); } q.push({0,s}); while(q.size()){ int now=q.top().second; q.pop(); if(vis[now]){ continue; } vis[now]=1; for(auto it:G2[now]){ int x=it.first,y=it.second; if(dis2[x]>dis2[now]+y){ dis2[x]=dis2[now]+y; q.push({dis2[x],x}); } } } return ; } int main(){ ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr); s=1; cin>>n>>m; for(int i=1;i<=n;i++){ dis1[i]=dis2[i]=1e18; } dis1[s]=0;dis2[s]=0; for(int i=1;i<=m;i++){ int value,u,v; cin>>u>>v>>value; G1[u].push_back({v,value}); G2[v].push_back({u,value}); } dijkstra1(); memset(vis,0,sizeof(vis)); dijkstra2(); for(int i=1;i<=n;i++){ ans+=dis1[i]+dis2[i]; } cout<<ans; return 0; }
信息
- ID
- 5687
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 11
- 已通过
- 7
- 上传者