#include #include #include #include using namespace std; const int N=5e4+5,N3=N*4,inf=0x3f3f3f3f; //RE N3=N*4多add()了一轮! int to[N3],ne[N3],w[N3],h[N],cnt=0,s=N-4,dist[N]; bool in[N]; queueq; void add(int u,int v,int w1) { to[++cnt]=v; w[cnt]=w1; ne[cnt]=h[u]; h[u]=cnt; } void spfa() { q.push(s); while(!q.empty()) { int u=q.front(); q.pop(); in[u]=0;//spfa的精髓!! for(int i=h[u];i;i=ne[i]) { int v=to[i],w1=w[i]; // printf("%d %d %d\n",u,v,w1); if(dist[u]+w1u? maxn:u; maxn=maxn>v? maxn:v; } //n不是点数,maxn才是 for(int i=0;i<=maxn;i++) { dist[i]=inf; } for(int i=0;i