诡异的16分求调
查看原帖
诡异的16分求调
227403
紫玄月楼主2024/11/27 16:28
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,u[200001],w[200001],v[200001],dis[200001];
int vis[200001];
vector<pair<int,int> >G[400001];
void bfs(int s){
    memset(dis,0x3f3f3f,sizeof(dis));
    memset(vis,false,sizeof(vis));
    queue<pair<int,int> > q1;
    dis[s]=0;
    q1.push({s,0});
    while(!q1.empty()){
        int u=q1.front().first,dist=q1.front().second;
        q1.pop();
        if(vis[u])
            continue;
        vis[u]=1;
		for(int i=0;i<G[u].size();i++){
			int v=G[u][i].first;
			int w=G[u][i].second;
			if(dis[u]+w<dis[v]){
				dis[v]=dis[u]+w;
                if(!vis[v])
				q1.push({v,dis[v]});
			}
		}
	}
}
signed main(){
	int s;
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++){
        cin>>u[i]>>v[i]>>w[i];
        G[u[i]].push_back({v[i],w[i]});
	}
    bfs(s);
    for(int i=1;i<=n;i++)
    	cout<<dis[i]<<" ";
}

这份代码错在哪里,只有16分,还有这个写法属于哪种求最短路的方式

2024/11/27 16:28
加载中...