1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; const int N=2*1005; const int M=2*1e5+100; int ans,n; int to[M],h[N],w[M],nxt[M],tot,dis[N],vis[N]; void add(int a, int b, int c){ to[++tot]=b,w[tot]=c,nxt[tot]=h[a],h[a]=tot; } void Dijkstra(int s){ priority_queue<pair<int,int> > q; memset(dis,0x3f,sizeof(dis)); dis[s]=0; q.push({0,s}); while(!q.empty()){ pair<int,int> k=q.top(); q.pop(); int v=k.second; if(vis[v]) continue; vis[v]=1; for(int i=h[v]; i!=0; i=nxt[i]){ int u=to[i]; if(dis[v]+w[i]<dis[u]){ dis[u]=dis[v]+w[i]; q.push({-dis[u],u}); } } } } int main() { int c,u,v,w,m; cin>>n>>m; for(int i=1; i<=m; i++){ cin>>u>>v>>w; add(u,v,w); add(v+n,u+n,w);//反向建边 } Dijkstra(1); for(int i=2; i<=n; i++){ ans+=dis[i]; } Dijkstra(1+n); for(int i=n+2; i<=2*n; i++){ ans+=dis[i]; } cout<<ans<<endl; return 0; }Pascal :
var max,n,m,i,j,k,l,u,v,w:longint; a,b:array[1..1000,1..1000]of longint; c:array[1..1000]of boolean; begin readln(n,m); for i:=1 to m do begin readln(u,v,w); if (a[u,v]=0)or(a[u,v]>w) then begin a[u,v]:=w; b[v,u]:=w; end; end; c[1]:=true; for i:=2 to n do begin max:=maxlongint; for j:=2 to n do if (not c[j])and(a[1,j]<max)and(a[1,j]<>0) then begin max:=a[1,j]; k:=j; end; c[k]:=true; for j:=2 to n do if a[k,j]<>0 then if (a[1,k]+a[k,j]<a[1,j])or(a[1,j]=0) then a[1,j]:=a[1,k]+a[k,j]; end; for i:=2 to n do inc(l,a[1,i]); a:=b; c[1]:=false; for i:=2 to n do begin max:=maxlongint; for j:=2 to n do if (c[j])and(a[1,j]<max)and(a[1,j]<>0) then begin max:=a[1,j]; k:=j; end; c[k]:=false; for j:=2 to n do if a[k,j]<>0 then if (a[1,k]+a[k,j]<a[1,j])or(a[1,j]=0) then a[1,j]:=a[1,k]+a[k,j]; end; for i:=2 to n do inc(l,a[1,i]); writeln(l); end.
- 1
信息
- ID
- 4214
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者