求调
查看原帖
求调
547238
篮网总冠军楼主2024/9/3 23:03

#include <bits/stdc++.h>
using namespace std;

int n,m,s;
int dis[10005];
vector<int>a[10005];
int dise[10005][10005];
bool vis[10005];
struct node{
	int dis;
	int bh;
	bool operator <( const node &x )const
    {
        return x.dis < dis;
    }
};
void dij(){
	int st=s;
	priority_queue<node>q;
	q.push((node){0,s});
	while(!q.empty()){
		node r=q.top();
		q.pop();
		if (vis[r.bh]) continue;
		vis[r.bh]=1;
		for(int i=0;i<a[r.bh].size();i++){
			if(!vis[a[r.bh][i]]) {
				if (dis[a[r.bh][i]]>dise[r.bh][a[r.bh][i]]+r.dis){
					dis[a[r.bh][i]]=dise[r.bh][a[r.bh][i]]+r.dis;
					q.push( ( node ){dis[a[r.bh][i]],a[r.bh][i]} );
				}
			} 
		}
	}
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>n>>m>>s; 
	for(int i=1;i<=n;i++) dis[i]=2147483647;
	memset(dise,0,sizeof(dise));
	for(int i=1;i<=m;i++){
		int u,v;
		int s1;
		scanf("%d%d%lld",&u,&v,&s1);
		if (dise[u][v]!=0) dise[u][v]=min(dise[u][v],s1),dise[v][u]=dise[u][v];
		else{
			a[u].push_back(v);
			a[v].push_back(u);
			dise[u][v]=dise[v][u]=s1;
		}
	}
	dis[s]=0;
	dij();
	for(int i=1;i<=n;i++) printf("%d ",dis[i]);
	return 0;
}

2024/9/3 23:03
加载中...