有个3分的测试点过不去,很烦。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n, m;
int v[300][300] = {0};
int minn = 999999999;
int x;
scanf("%d %d", &n, &m);
int a, b, dis;
for (int i = 0; i < m; i++)
{
scanf("%d %d %d", &a, &b, &dis);
v[a][b] = v[b][a] = dis;
}
int k, num, p;
vector<int> path;
scanf("%d", &k);
for (int i = 0; i < k; i++)
{
cin >> num;
int sum = 0;
int cnt = 0;
path.clear();
for (int j = 0; j < num; j++)
{
cin >> p;
path.push_back(p);
}
for (int j = 0; j < path.size() - 1; j++)
{
if (v[path[j]][path[j + 1]] > 0)
{
sum += v[path[j]][path[j + 1]];
cnt++;
}
}
if (cnt < num - 1) printf("Path %d: NA (Not a TS cycle)\n", i + 1);
else if (num < n + 1) printf("Path %d: %d (Not a TS cycle)\n", i + 1, sum);
else if (num == n + 1 && path.front() != path.back()) printf("Path %d: %d (Not a TS cycle)\n", i + 1, sum);
else if (num == n + 1 && path.front() == path.back())
{
if (sum < minn)
{
minn = sum;
x = i + 1;
}
printf("Path %d: %d (TS simple cycle)\n", i + 1, sum);
}
else if (num > n + 1 && path.front() == path.back())
{
if (sum < minn)
{
minn = sum;
x = i + 1;
}
printf("Path %d: %d (TS cycle)\n", i + 1, sum);
}
}
printf("Shortest Dist(%d) = %d", x, minn);
}