C++
有点小坑,所以记录一下
#include <bits/stdc++.h>
using namespace std;
const int N = 210;
int g[N][N];
int n, m, k;
int anscnt, ansid, anssum = 1e9;
vector<int> path;
int st[N];
int main() {
memset(g, 0x3f, sizeof g);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
g[a][b] = c, g[b][a] = c;
}
cin >> k;
for (int p = 1; p <= k; p++) {
memset(st, 0, sizeof st);
int N;
cin >> N;
path.clear();
path.push_back(0);
for (int i = 0; i < N; i++) {
int x;
cin >> x;
path.push_back(x);
st[x]++;
}
path.push_back(0);
if (N != n) continue;
for (int i = 1; i <= n; i++) // 每个地点只能打卡1次,必须为1
if (st[i] != 1) N--; // 巧减变量退出循环
if (N != n) continue;
int sum = 0;
bool flag = true;
for (int i = 0; i < path.size()-1; i++) {
if (g[path[i]][path[i+1]] == 0x3f3f3f3f) {
flag = false;
break;
}
sum += g[path[i]][path[i+1]];
}
if (flag) {
anscnt++;
if (sum < anssum) {
anssum = sum;
ansid = p;
}
}
}
cout << anscnt << endl;
cout << ansid << " " << anssum << endl;
return 0;
}