#include <stdio.h> #include <math.h> #include <stdlib.h> typedef struct _pilha{ int valor, tam; struct _pilha *prox; }pilha; pilha* criaPilha(){ pilha *p = (pilha *)malloc(sizeof(pilha)); p->valor = 0; p->tam = 0; p->prox = NULL; return p; } pilha* addPilha(pilha *p, int valor, int tam){ pilha *t = criaPilha(); t->valor = valor; t->prox = p; t->tam = tam; return t; } int distance(pilha *p[][2], int a, int b){ int result = 0; pilha* temp = p[a][0]; while(temp->prox!=NULL){ if(temp->valor==b){ result += temp->tam; break; } temp = temp->prox; } if(temp->valor!=b){ temp = p[temp->valor][0]; result += temp->tam; while(temp->prox!=NULL){ if(temp->valor==b){ result += temp->tam; break; } } } return result; } int main() { int n, t; scanf("%d %d", &n, &t); pilha *p[n][2]; for(int i=0; i<n; i++){ int a, b, c; scanf("%d %d %d", &a, &b, &c); p[a-1][0] = addPilha(p[a-1][0], b-1, c); p[b-1][1] = addPilha(p[b-1][1], a-1, c); } while(t--){ int u; scanf("%d", &u); int array[u], result = 0; for(int i=0; i<u; i++){ scanf("%d", &array[i]); } for(int i=0; i<u-1; i++){ for(int j=i+1; j<u; j++){ result += distance(p, array[i], array[j]); } } printf("%d\n", result); } return 0; }