#include <stdio.h>#include <string.h>#include <queue>#include <vector>using namespace STD;Const intn=1024x768;Const intinf=0x7fffffff;structedge{intU,v,w,use,del;}; vector<Edge>Edge vector<int>G[n];intN,m,dist[n],inq[n],mp[n][n],path[n],d[n];voidSPFA () {intI,u,v;memset(INQ,0,sizeof(INQ));memset(MP,0,sizeof(MP)); for(i=1; i<=n;i++) {dist[i]=inf; path[i]=1; } dist[1]=0; Queue<int>Q Q.push (1); inq[1]=1; while(!q.empty ()) {U=q.front (); Q.pop (); inq[u]=0; for(i=0; I<g[u].size (); i++) {intT=g[u][i];if(Edge[t].del)Continue;if(U==EDGE[T].U) v=edge[t].v;Elsev=edge[t].u;if(DIST[V]>DIST[U]+EDGE[T].W) {DIST[V]=DIST[U]+EDGE[T].W; Mp[u][v]=t;path[v]=u;if(inq[v]==0) {Q.push (v); inq[v]=1; } } } }}intMain () {int_,i,j,u,v,w; Edge TP;scanf("%d", &_); while(_--) {edge.clear (); for(i=0; i<1024x768; i++) g[i].clear ();scanf("%d", &n);scanf("%d", &m); for(i=0; i<m; i++) {scanf("%d%d%d", &u,&v,&w); Tp.u=u,tp.v=v,tp.w=w,tp.use=0, tp.del=0; Edge.push_back (TP); G[u].push_back (i); G[v].push_back (i); } SPFA ();if(Dist[n]==inf) {printf(" -1\n");Continue;}intK1=n,k2=path[n]; while(1) {edge[mp[k2][k1]].use=1;if(k2==1) Break; K1=K2; K2=PATH[K2]; }intans=-1; for(i=0; i<m; i++) {if(Edge[i].use) {edge[i].del=1; SPFA ();if(Dist[n]==inf) {ans=-1; Break; } ans=max (Ans,dist[n]); Edge[i].del=0; } }printf("%d\n", ans); }return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Hdu 3986 Harry Potter and the Final Battle SPFA morph