跟着要求模拟就好,判断能不能做到从家里出发,在每个网红点打卡仅一次,且能回到家里。
#include<bits/stdc++.h>
using namespace std;
const int N = 210;
int g[N][N];
bool st[N];
int main()
{
int n,m;cin>>n>>m;
memset(g,0x3f,sizeof g);
for(int i=1;i<=m;i++)
{
int a,b,c;cin>>a>>b>>c;
g[a][b]=g[b][a]=c;
}
int k;cin>>k;
int cnt=0,pos=0,mn=0x3f3f3f3f;
for(int i=1;i<=k;i++)
{
memset(st,0,sizeof st);
int nn;cin>>nn;
bool ok=0;
if(nn!=n) ok=1;
int la=0,ans=0;
for(int j=1;j<=nn;j++)
{
int v;cin>>v;
if(!st[v] && g[la][v]!=0x3f3f3f3f)
{
st[v]=1;
ans+=g[la][v];
la=v;
}
else ok=1;
}
if(g[la][0]!=0x3f3f3f3f) ans+=g[la][0];
else ok=1;
if(ok) continue;
else
{
if(ans<mn)
{
mn=ans;
pos=i;
}
cnt++;
}
}
cout<<cnt<<endl<<pos<<" "<<mn;
return 0;
}