2020年团体程序设计天梯赛 L2-4 网红点打卡攻略
思路:
水题,略过
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;
}

浙公网安备 33010602011771号