求调
查看原帖
求调
1353562
small_lazy_pig楼主2024/11/7 20:46
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,a[1005][1005],b[1005][1005],d[1005],vis[1005],ans;
void dijkstra(){
	memset(d,0x3f,sizeof(d));
	memset(vis,0,sizeof(vis));
	d[1]=0;
	queue<ll>q;
	q.push(1);
	while(!q.empty()){
		ll u=q.front();
		q.pop();
		if(vis[u])continue;
		vis[u]=1;
		for(int i=1;i<=n;i++){
			ll v=i,w=a[u][v];
			if(a[u][v]==1e18||i==u)continue;
			if(d[v]>d[u]+w){
				d[v]=d[u]+w;
				q.push(v);
			}
		}
	}
	for(int i=2;i<=n;i++)ans+=d[i];
	return ;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=1e18;
			b[i][j]=1e18;
		}
	}
	for(int i=1;i<=m;i++){
		ll u,v,w;
		cin>>u>>v>>w;
		a[u][v]=min(a[u][v],w);
		b[v][u]=min(b[v][u],w);
	}
	dijkstra();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=b[i][j];
		}
	}
	dijkstra();
	cout<<ans;
    return 0;
}

2024/11/7 20:46
加载中...