羞耻,spfa板子老是敲委
必须要发个板子了
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
using namespace std;
struct wyh{ int to,next,w; } e[200010];
int n,m,cnt,head[200010],dis[200010],r[200010];
bool v[200010];
void add(int x,int y,int z){
e[++cnt].to=y;
e[cnt].next=head[x];
e[cnt].w=z;
head[x]=cnt;
return ;
}
void Spfa(int S){
int i,t,temp;
queue<int> Q;
memset(v,0,sizeof(v)) ;
memset(dis,0x3f,sizeof(dis));
memset(r,0,sizeof(r));
Q.push(S);
v[S]=true;
dis[S]=0;
while(!Q.empty()){
t=Q.front();Q.pop();v[t]=false;
for(i=head[t];i;i=e[i].next){
temp=e[i].to;
if(dis[temp]>dis[t]+e[i].w)
{
dis[temp]=dis[t]+e[i].w ;
if(!v[temp])
{
Q.push(temp);
v[temp]=true;
if(++r[temp]>n)return ;
}
}
}
}
return ;
}
int main ( )
{
int S,T;SS
scanf("%d%d",&n,&m) ;
for(int i=1;i<=m;++i){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
scanf("%d",&S);
scanf("%d%d",&S,&T);
Spfa(S);
printf("%d\n",dis[T]) ;
return 0;
}