L2-036 网红点打卡攻略 (25 分)
水题。
const int N=210;
int g[N][N];
int n,m,q;
int tot,ans,idx;
int main()
{
cin>>n>>m;
memset(g,0x3f,sizeof g);
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
g[a][b]=g[b][a]=c;
}
cin>>q;
for(int i=1;i<=q;i++)
{
int k;
cin>>k;
vector<int> a(k+1);
vector<int> cnt(n+1,0);
for(int i=0;i<k;i++) cin>>a[i];
if(k != n) continue; // k不为n,要么是少走了点,要么是走了重复点
a[k]=0; // 最终要回到起点
bool ok=true;
int sum=0;
for(int i=0;i<=k;i++)
{
if(i == 0) sum+=g[0][a[i]];
else sum+=g[a[i-1]][a[i]];
cnt[a[i]]++;
if(sum > INF || cnt[a[i]] > 1)
{
ok=false;
break;
}
}
if(ok)
{
tot++;
if(ans == 0 || sum < ans)
{
ans=sum;
idx=i;
}
}
}
cout<<tot<<endl;
cout<<idx<<' '<<ans<<endl;
//system("pause");
return 0;
}