=.=好菜
#include#include #include #include #include using namespace std;const int N = 1e3+10;const int M = 100000+10;typedef long long ll;const ll INF = 1e15;int n,m,head[N],rehead[N],tot;struct node { int v,w,next;}E[M],reE[M];void init() { tot=0; memset(head,0,sizeof(head)); memset(rehead,0,sizeof(rehead));}void addEdge(int u,int v,int w) { ++tot; E[tot].next = head[u]; head[u]=tot; E[tot].v = v; E[tot].w = w; reE[tot].next = rehead[v]; rehead[v]=tot; reE[tot].v = u; reE[tot].w = w;}bool inq[N]; ll d[N];queue que;void spfa(int src) { while(!que.empty()) que.pop(); for(int i=0;i d[now] + w) { d[v] = d[now] + w; if(!inq[v]) que.push(v); } } }}struct A { int v; ll f,g; ///v是current点 f(v)=g(v)+h(v) g(v):st到v的估值, h(v):v到ed的估值 bool operator<(const A other) const { if(other.f == f) return other.g < g; return other.f < f; }};int Astar(int st,int ed,int k) { priority_queue Q; if(st==ed) k++; if(d[st]==INF) return -1; int cnt = 0; A t,tt; t.v=st,t.g=0,t.f=t.g+d[st]; Q.push(t); while (!Q.empty()) { tt = Q.top(); Q.pop(); int u=tt.v; if(u == ed) { cnt++; if(cnt==k) return tt.g; } for(int i=head[u]; i; i=E[i].next) { t.v = E[i].v; t.g = tt.g + E[i].w; t.f = t.g + d[t.v]; Q.push(t); } } return -1;}int main () { //freopen("in.txt","r",stdin); while (scanf("%d %d", &n, &m)==2) { init(); for(int i=1;i<=m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); addEdge(x,y,z); } int s,t,k; scanf("%d%d%d",&s, &t, &k); spfa(t); //for(int i=1;i<=n;i++) cout << d[i]<