#include #include #include #include using namespace std; typedef long long LL; typedef pair PII; const int INF = 0x3f3f3f3f; const int N = 30005, M = 150005; inline int read() { register int x = 0, f = 1; register char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar(); return x * f; } int n, m; struct Edge { int v,nxt,w; }e[M]; int head[N], idx = 0; inline void add(int u,int v,int w=0) { e[++idx].v = v,e[idx].w = w, e[idx].nxt = head[u],head[u] = idx; } int dis[N], st[N], times[N]; bool spfa(int start) { stack q; memset(dis,0x3f,sizeof dis); dis[start] = 0, st[start] = times[start] = 1, q.push(start); while(!q.empty()) { int u = q.top(); q.pop(); st[u] = 0; for(int i=head[u];i;i=e[i].nxt) { int v = e[i].v, w = e[i].w; if(dis[v] > dis[u] + w) { dis[v] = dis[u] + w; if(!st[v]) { st[v] = 1, q.push(v); // if(times[v] >= n) return 0; } } } } return 1; } int main() { n = read(), m = read(); for(int i=1;i<=m;i++) { int u = read(),v = read(),w = read(); add(u,v,w); } spfa(1); cout<