60分求助!
查看原帖
60分求助!
415970
变异哥斯拉楼主2022/5/22 14:48
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+10;
const int inf=(1<<31)-1;
int vis[maxn],n,m,head[maxn],k,ans;
int dis[maxn];
struct node{
	int to,next,w;
}e[maxn*2];
struct qnode{
	int id,val;
	qnode(int iid,int ww){id=iid;val=ww;}
	friend bool operator<(qnode q1,qnode q2){
		return q1.val>q2.val;
	}
};
void adde(int u,int v,int w){
	e[++k].to=v;e[k].w=w;
	e[k].next=head[u];head[u]=k;
}
void dij(int s){
	priority_queue<qnode> q;
	for(int i=1;i<=n;i++)dis[i]=inf;
	memset(vis,0,sizeof(vis));
	dis[s]=0;q.push(qnode(s,0));
	while(!q.empty()){
		qnode qn=q.top();q.pop();
		if(vis[qn.id])continue;
		vis[qn.id]=true;
		for(int i=head[qn.id];i;i=e[i].next){
			int v=e[i].to;
			if(dis[v]>dis[qn.id]+e[i].w){
				dis[v]=dis[qn.id]+e[i].w;
				q.push(qnode(v,dis[v]));
			}
		}
	}
}
int main(){
	int u,v,w;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
    	scanf("%d%d%d",&u,&v,&w);
    	adde(u,v,w);
	}
	dij(1);
	for(int i=2;i<=n;i++)ans+=dis[i];
	for(int i=2;i<=n;i++){
		dij(i);
		ans+=dis[1];
	}
	cout<<ans;
	return 0;
}
2022/5/22 14:48
加载中...