#include <bits/stdc++.h>
using namespace std;
int e[210][210];
int main()
{
int n,m,a[210],book[210];
cin>>n>>m;
while(m--)
{
int x,y,z;
cin>>x>>y>>z;
e[x][y]=z;
e[y][x]=z;
}
int t,minn=0x3f3f3f3f,num,tot=0;
cin>>t;
for(int i=1; i<=t; i++)
{
int k,j,flag=1;
memset(book,0,sizeof(book));
cin>>k;
for(j=1; j<=k; j++)
{
cin>>a[j];
book[a[j]]++;
}
a[0]=a[k+1]=0;
for(j=1; j<=n; j++)//判断能不能走且仅走一次所有网红点
if(book[j]!=1)
{
flag=0;
break;
}
if(flag)
{
for(j=0; j<=k; j++)//判断这些路径能不能从家开始遍历所有网红点然后回家(确定他们之间是否有路)
if(e[a[j]][a[j+1]]==0)
{
flag=0;
break;
}
}
if(flag==1)//如果都可以的话代表这是一条可行的路径
tot++;//可行路径+1
else
continue;
int sum=0;
for(j=0; j<=k; j++)
sum+=e[a[j]][a[j+1]];//计算花费
if(sum<minn)
{
minn=sum;//更新最小花费
num=i;//记录序号
}
}
printf("%d\n",tot);
printf("%d %d\n",num,minn);
return 0;
}
L2-036 网红点打卡攻略 (25 分)
最新推荐文章于 2024-05-21 10:34:16 发布