dfs版spfa TLE求助
查看原帖
dfs版spfa TLE求助
362101
_TLEer_的小号楼主2021/7/20 11:00

Rt. code:

#include<iostream>
#include<cstring>
#define int long long
#define re register
using namespace std;
int n,m,s,u,v,w,dis[10010],lnsz,hd[10010];
bool inq[10050];
struct ln{
	int u,v,w,nxt;
}a[500010];
void add(int u,int v,int w){
	a[++lnsz].u=u;
	a[lnsz].v=v;
	a[lnsz].w=w;
	a[lnsz].nxt=hd[u];
	hd[u]=lnsz;
}
void dfs_spfa(int t){
	inq[t]=true;
	for(re int i=hd[t];i;i=a[i].nxt){
		if(dis[a[i].v]>dis[t]+a[i].w){
			dis[a[i].v]=dis[t]+a[i].w;
			if(!inq[a[i].v])
				dfs_spfa(a[i].v);
			else{
				cerr<<"FUH";
				return;
			}
		}
	}
	inq[t]=false;
}
signed main(){
	cin>>n>>m>>s;
	for(re int i=0;i<=n;i++)
		dis[i]=2147483647;
	dis[s]=0;
	for(re int i=0;i<m;i++){
		cin>>u>>v>>w;
		add(u,v,w); 
	}
	dfs_spfa(s);
	for(re int i=1;i<=n;i++)
		cout<<dis[i]<<' ';
	return 0;
}
2021/7/20 11:00
加载中...