#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX 1000
#define INF 100000000
typedef struct {
int to;
int weight;
}Edge;
Edge adj[MAX][MAX];
int edgeCount[MAX];
int dist[MAX];
int visited[MAX];
int n, m;
void dijkstra(int start){
for(int i=0; i<n; i++){
dist[i] = INF;
visited[i] = 0;
}
dist[start] = 0;
for(int i=0; i<n; i++){
int u = -1;
// Pick the unvisted node with the smallest distance
for(int j=0; j<n; j++){
if(!visited[j] && (u == -1 || dist[j] < dist[u])){
u = j;
}
}
if(dist[u] == INF) break; // Remaining nodes are unreachable
visited[u] = 1;
//Relax edges
for(int k=0; k<edgeCount[u]; k++){
int v = adj[u][k].to;
int w = adj[u][k].weight;
if(dist[u] +w <dist[v]){
dist[v] = dist[u]+w;
}
}
}
}
int main() {
//Read all edges
for(int i=0; i<m; i++){
int u, v, w;
scanf("%d %d %d", &u
, &v
, &w
); adj[u][edgeCount[u]].to = v;
adj[u][edgeCount[u]].weight = w;
edgeCount[u]++;
}
int start, end;
scanf("%d %d", &start
, &end
); dijkstra(start);
if(dist[end] == INF)
else
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2RlZmluZSBNQVggMTAwMAojZGVmaW5lIElORiAxMDAwMDAwMDAKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCB0bzsKICAgIGludCB3ZWlnaHQ7Cn1FZGdlOwoKRWRnZSBhZGpbTUFYXVtNQVhdOwppbnQgZWRnZUNvdW50W01BWF07CgppbnQgZGlzdFtNQVhdOwppbnQgdmlzaXRlZFtNQVhdOwppbnQgbiwgbTsKCnZvaWQgZGlqa3N0cmEoaW50IHN0YXJ0KXsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAgICAgZGlzdFtpXSA9IElORjsKICAgICAgICB2aXNpdGVkW2ldID0gMDsKICAgIH0KCiAgICBkaXN0W3N0YXJ0XSA9IDA7CgogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICBpbnQgdSA9IC0xOwoKICAgICAgICAvLyBQaWNrIHRoZSB1bnZpc3RlZCBub2RlIHdpdGggdGhlIHNtYWxsZXN0IGRpc3RhbmNlCgogICAgICAgIGZvcihpbnQgaj0wOyBqPG47IGorKyl7CiAgICAgICAgICAgIGlmKCF2aXNpdGVkW2pdICYmICh1ID09IC0xIHx8IGRpc3Rbal0gPCBkaXN0W3VdKSl7CiAgICAgICAgICAgICAgICB1ID0gajsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoZGlzdFt1XSA9PSBJTkYpIGJyZWFrOyAvLyBSZW1haW5pbmcgbm9kZXMgYXJlIHVucmVhY2hhYmxlCiAgICAgICAgdmlzaXRlZFt1XSA9IDE7CgogICAgICAgIC8vUmVsYXggZWRnZXMKICAgICAgICBmb3IoaW50IGs9MDsgazxlZGdlQ291bnRbdV07IGsrKyl7CiAgICAgICAgICAgIGludCB2ID0gYWRqW3VdW2tdLnRvOwogICAgICAgICAgICBpbnQgdyA9IGFkalt1XVtrXS53ZWlnaHQ7CgogICAgICAgICAgICBpZihkaXN0W3VdICt3IDxkaXN0W3ZdKXsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdK3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewoKICAgIHNjYW5mKCIlZCAlZCIsJm4sICZtKTsKICAgIC8vUmVhZCBhbGwgZWRnZXMKICAgIGZvcihpbnQgaT0wOyBpPG07IGkrKyl7CiAgICAgICAgaW50IHUsIHYsIHc7CiAgICAgICAgc2NhbmYoIiVkICVkICVkIiwgJnUsICZ2LCAmdyk7CiAgICAgICAgYWRqW3VdW2VkZ2VDb3VudFt1XV0udG8gPSB2OwogICAgICAgIGFkalt1XVtlZGdlQ291bnRbdV1dLndlaWdodCA9IHc7CiAgICAgICAgZWRnZUNvdW50W3VdKys7CiAgICB9CgogICAgaW50IHN0YXJ0LCBlbmQ7CiAgICBzY2FuZigiJWQgJWQiLCAmc3RhcnQsICZlbmQpOwogICAgIGRpamtzdHJhKHN0YXJ0KTsKCiAgICAgaWYoZGlzdFtlbmRdID09IElORikKICAgICAgICBwcmludGYoIi0xXG4iKTsKICAgICBlbHNlCiAgICAgICAgcHJpbnRmKCIlZFxuIixkaXN0W2VuZF0pOwogICAgLyogRW50ZXIgeW91ciBjb2RlIGhlcmUuIFJlYWQgaW5wdXQgZnJvbSBTVERJTi4gUHJpbnQgb3V0cHV0IHRvIFNURE9VVCAqLyAgICAKICAgIHJldHVybiAwOwp9