53c6555a998b26e7e41a367315595b49895bc1b4a3725e4d0a031bd7d62c2439
// https://szkopul.edu.pl/problemset/problem/HP0-iQt7v7vElza8XxoucKto/site/?key=statement
// OIG I (3 etap)
#include <iostream>
constexpr int sizik = 128, INF = 100 * 1000 * 1001;
int odl[sizik][sizik];
void FloydWarshall(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
if (odl[j][k] > odl[j][i] + odl[i][k]) {
odl[j][k] = odl[j][i] + odl[i][k];
}
}
}
}
}
void FloydWarshall2(int n, int x, int y, int value) {
for (int u = 1; u <= n; u++) {
for (int v = 1; v <= n; v++) {
if (odl[u][v] > odl[u][x] + odl[y][v] + value) {
odl[u][v] = odl[u][x] + odl[y][v] + value;
}
if (odl[u][v] > odl[u][y] + odl[x][v] + value) {
odl[u][v] = odl[u][y] + odl[x][v] + value;
}
}
}
}
void buildStreet(int a, int b, int w) {
odl[a][b] = std::min(odl[a][b], w);
odl[b][a] = std::min(odl[b][a], w);
}
int main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int n, k, m;
std::cin >> n >> k >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
odl[i][j] = INF;
}
odl[i][i] = 0;
}
for (int i = 0; i < k; i++) {
int a, b, w;
std::cin >> a >> b >> w;
buildStreet(a, b, w);
}
FloydWarshall(n);
for (int i = 0; i < m; i++) {
int a, b, w;
std::cin >> a >> b >> w;
int prev = odl[1][n];
int prev_value = odl[a][b];
if (w >= prev_value) {
std::cout << "0\n";
} else {
if ((((odl[1][a] + w + odl[b][n]) < prev) || (odl[1][b] + w + odl[a][n]) < prev)) {
buildStreet(a, b, w);
FloydWarshall2(n, a, b, w);
std::cout << "1\n";
} else {
std::cout << "0\n";
}
}
}
return 0;
}