#include <cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>using namespacestd;#defineMAXN 2008#defineMAXM 2000008#defineINF 2000000000intlt[maxn],lt[maxn],sum=1, sum=1;intH[MAXN];ints,t,k,n,m;BOOLPD[MAXN];structline{intU,v,w,nt;} Eg[maxm],eg[maxm];inlinevoidAddintUintVintW) {eg[++sum].u=u; Eg[sum].v=v; Eg[sum].w=w; Eg[sum].nt=lt[u]; lt[u]=sum;} InlinevoidADD (intUintVintW) {eg[++sum].u=u; Eg[sum].v=v; Eg[sum].w=w; Eg[sum].nt=lt[u]; lt[u]=SUM;} InlinevoidReadint&x) { Charch; for(Ch=getchar ();ch<'0'|| Ch>'9'; Ch=getchar ()); x=ch- -; for(Ch=getchar (); ch>='0'&&ch<='9'; Ch=getchar ()) x=x*Ten+ch- -;} InlinevoidSPFA () {Queue<int>Q; for(intI=1; i<=n;i++) h[i]=INF; memset (PD,0,sizeof(PD)); H[t]=0; pd[t]=1; Q.push (t); while(!Q.empty ()) { intu=Q.front (); Q.pop (); for(intI=lt[u];i;i=Eg[i].nt) { intv=eg[i].v; if(h[u]+eg[i].w<H[v]) {H[v]=h[u]+EG[I].W; if(!Pd[v]) {Pd[v]=1; Q.push (v); }}} Pd[u]=0; }}classnode{ Public: intF,g,u; BOOL operator< (Constnode& t)Const{ returnF>T.f; } node (intAintBintc): F (a), G (b), U (c) {} node () {}};intIq[maxn];inlineintA_star () {priority_queue<node>Q; memset (IQ,0,sizeof(IQ)); Iq[s]=0; Q.push (Node (h[s),0, s)); while(!Q.empty ()) {Node cur=Q.top (); //printf ("%d%d%d\n", cur.f,cur.g,cur.u,iq[t]);Q.pop (); IQ[CUR.U]++; if(iq[t]==k)returnCUR.F; if(iq[cur.u]>k)Continue; for(intI=lt[cur.u];i;i=Eg[i].nt) { intv=eg[i].v; Q.push (Node (h[v)+cur.g+eg[i].w,cur.g+eg[i].w,v)); } } return-1;} InlineintMain () {//freopen ("1.in", "R", stdin);read (n); read (m); for(intI=1; i<=m;i++) { intu,v,w; Read (u); Read (v); Read (w); Add (U,V,W); ADD (V,U,W); } read (s); Read (t); Read (k); if(s==t) k++; SPFA (); //for (int i=1;i<=n;i++) printf ("%d", H[i]);printf"%d\n", A_star ()); return 0;}
POJ2449 (k short Circuit)