#include <bits/stdc++.h>
#define LL long long
#define PII pair<int,int>
#pragma comment(linker,"/stack:200000000")
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const int MAXN=1e6+5;
int N,M,Q;
int fa[MAXN],siz[MAXN];
int ans[MAXN];
int edge[MAXN];
vector<int>ask[MAXN];
int tot=0;
struct Edge
{
int u,v,w;
}e1[MAXN],e2[MAXN];
struct DSUHistory
{
int u,v,fu,fv;
}his[MAXN];
int tp=0;
int Find(int x)
{
while(fa[x]!=x) x=fa[x];
return x;
}
void Merge(int u,int v)
{
int fu=Find(u),fv=Find(v);
if(fu==fv) return;
if(siz[fu]<siz[fv]) swap(fu,fv);
fa[fv]=fu;
siz[fu]+=siz[fv];
his[++tp]={u,v,fu,fv};
return;
}
bool cmp1(Edge i,Edge j)
{
return i.w<j.w;
}
bool cmp2(int i,int j)
{
return e2[i].w<e2[j].w;
}
bool cmp3(vector<int> i,vector<int> j)
{
return e2[i[1]].w<e2[j[1]].w;
}
int Read()
{
int x=0;
char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch))
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x;
}
int main()
{
N=Read(),M=Read();
for(int i=1;i<=M;i++)
{
int u,v,w;
u=Read(),v=Read(),w=Read();
e1[i]={u,v,w};
e2[i]={u,v,w};
}
sort(e1+1,e1+M+1,cmp1);
Q=Read();
for(int i=1;i<=Q;i++)
{
ans[i]=1;
int k;
k=Read();
for(register int j=1;j<=k;j++) edge[j]=Read();
sort(edge+1,edge+k+1,cmp2);
for(int j=1;j<=k;j++)
{
if(e2[edge[j-1]].w!=e2[edge[j]].w) ask[++tot].push_back(i);
ask[tot].push_back(edge[j]);
}
}
sort(ask+1,ask+tot+1,cmp3);
int ind=1;
for(int i=1;i<=N;i++) fa[i]=i,siz[i]=1;
for(int i=1;i<=tot;i++)
{
while(ind<=M&&e1[ind].w<e2[ask[i][1]].w)
{
Merge(e1[ind].u,e1[ind].v);
ind++;
}
for(register int j=1;j<ask[i].size();j++)
{
int it=ask[i][j];
if(Find(e2[it].u)==Find(e2[it].v))
{
ans[ask[i][0]]=0;
break;
}
else Merge(e2[it].u,e2[it].v);
}
for(register int j=ask[i].size()-1;j;j--)
{
int it=ask[i][j];
while(tp&&his[tp].u==e2[it].u&&his[tp].v==e2[it].v)
{
fa[his[tp].fv]=his[tp].fv;
siz[his[tp].fu]-=siz[his[tp].fv];
tp--;
}
}
}
for(int i=1;i<=Q;i++) puts(ans[i]?"YES":"NO");
return 0;
}