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;
}