#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e7+5;
using ll = long long;
int par[MAXN+1];
int rnk[MAXN+1];
void make(int v){
par[v]=v;
rnk[v]=0;
}
int findPar(int v){
if(v == par[v])return v;
return par[v] = findPar(par[v]);
}
void unite(int a1 ,int b1){
int a = findPar(a1);
int b = findPar(b1);
if(a == b){return;}
if(rnk[a]<rnk[b])swap(a,b);
par[b]=a;
if(rnk[a]==rnk[b])rnk[a]+=1;
}
struct Edge{
ll w;
ll u,v;
bool operator<(const Edge &other)const{
return w<other.w;
};
};
struct Query{
ll mw;
ll u,v;
ll idx;
bool operator<(const Query &other)const{
return mw<other.mw;
};
};
int main() {
int t;
cin>>t;
while(t--){
int n,m,q ;
cin>>n>>m>>q;
for(int i = 0;i<n ;i++){
make(i);
}
vector<Edge>edges(m);
for(int i = 0;i<m ;i++){
cin>>edges[i].u>>edges[i].v>>edges[i].w;
}
vector<Query>query(q);
for(int i = 0;i<q;i++){
cin>>query[i].u>>query[i].v>>query[i].mw;
query[i].idx = i;
}
sort(edges.begin(),edges.end());
sort(query.begin(),query.end());
vector<ll>ans(q+1,0);
ll ei = 0;
for(ll i = 0 ;i<q;i++){
const Query &curr = query[i];
while(ei<m && edges[ei].w<curr.mw){
unite(edges[ei].u,edges[ei].v);
ei++;
}
if(findPar(curr.u) == findPar(curr.v)){
ans[curr.idx]=1;
}
}
for(int i = 0 ;i<q;i++){
cout<<ans[i]<<endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNQVhOID0gMWU3KzU7CnVzaW5nIGxsID0gbG9uZyBsb25nOwppbnQgcGFyW01BWE4rMV07CmludCBybmtbTUFYTisxXTsKCnZvaWQgbWFrZShpbnQgdil7CglwYXJbdl09djsKCXJua1t2XT0wOwp9CgppbnQgZmluZFBhcihpbnQgdil7CglpZih2ID09IHBhclt2XSlyZXR1cm4gdjsKCXJldHVybiBwYXJbdl0gPSBmaW5kUGFyKHBhclt2XSk7Cn0KCnZvaWQgdW5pdGUoaW50IGExICxpbnQgYjEpewoJaW50IGEgPSBmaW5kUGFyKGExKTsKCWludCBiID0gZmluZFBhcihiMSk7CgkKaWYoYSA9PSBiKXtyZXR1cm47fQoJaWYocm5rW2FdPHJua1tiXSlzd2FwKGEsYik7CgoKICAgIHBhcltiXT1hOwoJaWYocm5rW2FdPT1ybmtbYl0pcm5rW2FdKz0xOwp9CnN0cnVjdCBFZGdlewoJbGwgdzsKCWxsIHUsdjsKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IEVkZ2UgJm90aGVyKWNvbnN0ewoJCXJldHVybiB3PG90aGVyLnc7Cgl9Owp9OwoKc3RydWN0IFF1ZXJ5ewoJbGwgbXc7CglsbCB1LHY7CglsbCBpZHg7CgkKCQlib29sIG9wZXJhdG9yPChjb25zdCBRdWVyeSAmb3RoZXIpY29uc3R7CgkJcmV0dXJuIG13PG90aGVyLm13OwoJfTsKfTsKaW50IG1haW4oKSB7CglpbnQgdDsKCWNpbj4+dDsKCXdoaWxlKHQtLSl7CiAgIGludCBuLG0scSA7CiAgIGNpbj4+bj4+bT4+cTsKICAgCiAgIGZvcihpbnQgaSA9IDA7aTxuIDtpKyspewogICAJbWFrZShpKTsKICAgfQogICB2ZWN0b3I8RWRnZT5lZGdlcyhtKTsKIGZvcihpbnQgaSA9IDA7aTxtIDtpKyspewogCWNpbj4+ZWRnZXNbaV0udT4+ZWRnZXNbaV0udj4+ZWRnZXNbaV0udzsKIH0KIHZlY3RvcjxRdWVyeT5xdWVyeShxKTsKIGZvcihpbnQgaSA9IDA7aTxxO2krKyl7CiAJY2luPj5xdWVyeVtpXS51Pj5xdWVyeVtpXS52Pj5xdWVyeVtpXS5tdzsKIAlxdWVyeVtpXS5pZHggPSBpOwogfQogc29ydChlZGdlcy5iZWdpbigpLGVkZ2VzLmVuZCgpKTsKIHNvcnQocXVlcnkuYmVnaW4oKSxxdWVyeS5lbmQoKSk7CiAKIHZlY3RvcjxsbD5hbnMocSsxLDApOwogbGwgZWkgPSAwOwogZm9yKGxsIGkgPSAwIDtpPHE7aSsrKXsKIAljb25zdCBRdWVyeSAmY3VyciA9IHF1ZXJ5W2ldOwogCQogCXdoaWxlKGVpPG0gJiYgZWRnZXNbZWldLnc8Y3Vyci5tdyl7CiAJCXVuaXRlKGVkZ2VzW2VpXS51LGVkZ2VzW2VpXS52KTsKIAkJZWkrKzsKIAl9CiAJCiAJaWYoZmluZFBhcihjdXJyLnUpID09IGZpbmRQYXIoY3Vyci52KSl7CiAJCWFuc1tjdXJyLmlkeF09MTsKIAl9CiB9CiAKICAgIGZvcihpbnQgaSA9IDAgO2k8cTtpKyspewogICAgCWNvdXQ8PGFuc1tpXTw8ZW5kbDsKICAgIH0KCX0KCXJldHVybiAwOwp9