求助!样例都挂了!
查看原帖
求助!样例都挂了!
180246
484A51楼主2021/8/21 13:19
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10,INF=0x3f3f3f3f;
int n,m,s,dis[N];
vector<pair<int,int> > g[N];
bool flag[N];
void dij(){
	memset(dis,0x3f,sizeof(dis));
	memset(flag,0,sizeof(flag));
	dis[s]=0;
	for(int i=0;i<n;i++){
		int u=0;
		for(int j=1;j<=n;j++){
			if(flag[j]&&dis[u]>dis[j]) u=j;
		}
		if(!u) return;
		flag[u]=1;
		for(int j=0;j<g[u].size();j++){
			int v=g[u][j].first,w=g[u][j].second;
			if(flag[v]) continue;
			dis[v]=min(dis[v],dis[u]+w);
		}
	}
}
int read();
signed main(){
	n=read(); m=read(); s=read();
	for(int i=0;i<m;i++){
		int x=read(),y=read(),w=read();
		g[x].push_back(make_pair(y,w));
		g[y].push_back(make_pair(x,w));
	}
	dij();
	for(int i=1;i<=n;i++){
		if(dis[i]<INF) cout<<dis[i]<<" ";
		else cout<<"-1 ";
	}
	return 0;
}
int read(){
    int x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}

样例除了 ss 点,其余全部输出了 1-1(为了配合我们 OJOJ 上的题)!

2021/8/21 13:19
加载中...