如何去掉重边
查看原帖
如何去掉重边
241817
Chancylaser楼主2021/8/3 21:12

rt,怎么去掉重边啊。

30分,其余wa,应该是重边的问题?

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,s;
struct bian{
	int to,w;
	int nxt;
}e[10005];
int tot;
int dist[10005];
bool rit[10005];
int first[10005];
void addb(int u,int v,int w){
	tot++;
	e[tot].nxt=first[u];
	first[u]=tot;
	e[tot].to=v;
	e[tot].w=w;
}
void dij(int p){
	memset(dist,1e9+7,sizeof(dist));
	dist[p]=0;
	for(int i=1;i<=n;i++){
		int q=0;
		for(int j=1;j<=n;j++)
			if(rit[j]==0&&(q==0||dist[j]<dist[q]))
				q=j;
		rit[q]=1;
		for(int j=first[q];j;j=e[j].nxt){
			int t_o=e[j].to,qu=e[j].w;
			dist[t_o]=min(dist[t_o],dist[q]+qu);
		}
	}
}
int main(){
 	cin>>n>>m>>s;
 	for(int i=1;i<=m;i++){
 		int a,b,c;
 		cin>>a>>b>>c;
 		addb(a,b,c);
	}
	dij(s);
	for(int i=1;i<=n;i++)
		cout<<dist[i]<<" ";
	return 0;
}
2021/8/3 21:12
加载中...