思路:
水题,略过
Tip:
无
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 200 + 5; const int INF = 0x7FFFFFFF; int mp[maxn][maxn]; int len[maxn]; int minn = INF; int indexx = 0; int main() { memset(mp, 0x3f, sizeof(mp)); int n, m; cin >> n >> m; for (int i = 1; i <= m; i++) { int x, y, z; cin >> x >> y >> z; if (mp[x][y] > z) mp[x][y] = z; if (mp[y][x] > z) mp[y][x] = z; } int q; cin >> q; int num = 0; for (int nowidnex = 1; nowidnex <= q; nowidnex++) { int k; set<int> s; cin >> k; for (int i = 1; i <= k; i++) { cin >> len[i]; s.insert(len[i]); } if (k != n || s.size() != n || mp[0][len[1]] == 0x3f3f3f3f || mp[len[k]][0] == 0x3f3f3f3f) continue; int ans = mp[0][len[1]] + mp[len[k]][0]; bool flag = true; for (int i = 1; i < k; i++) { if (mp[len[i]][len[i + 1]] == 0x3f3f3f3f) { flag = false; break; } ans += mp[len[i]][len[i + 1]]; } if (!flag) continue; if (ans < minn) { minn = ans; indexx = nowidnex; } num++; } cout << num << endl; cout << indexx << " " << minn << endl; return 0; }