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;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14683028.html