PTA-网红点打卡攻略

PTA-网红点打卡攻略_第1张图片

思路:直接根据要求判断就可以。要注意每个打卡点是否已经访问过,是否能从家到打卡起点,打卡终点能否回家,打卡路径是否连通,每个打卡点只访问一次.

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define ll long long
#define int long long
#define lowbit(x) ((~x+1)&x)
#define inf 1e9+10
using namespace std;
const int N=1e4+10;
int g[205][205],n,m;
int val[205],path[305],vis[305];

long long cal(int n,int path[]) {
    int sum=g[path[1]][0];
    vis[path[1]]=1;
    for(int i=2; i<=n; i++) {
        if(vis[path[i]]) return -1;
        if(g[path[i]][path[i-1]]==0) {
            return -1;
        }
        sum+=g[path[i]][path[i-1]];
        vis[path[i]]=1;
    }
    sum+=g[path[n]][0];
    return sum;
}

signed main() {
    cin>>n>>m;
    for(int i=1; i<=m; i++) {
        int u,v,w;
        cin>>u>>v>>w;
        g[u][v]=g[v][u]=w;
    }
    int k;
    cin>>k;
    int count=0,cnt=0,num;
    int t,minn=inf;
    while(k--) {
        count++;
        memset(vis,0,sizeof(vis));
        cin>>t;
        for(int i=1; i<=t; i++) {
            cin>>path[i];
        }
        if(g[0][path[1]]==0||g[path[t]][0]==0||t!=n) continue; 
        int ans = cal(t,path);
        if(ans!=-1) {
            cnt++;
            if(ans<minn) {
                minn = ans;
                num = count;
            }
        }
    }
    cout<<cnt<<endl;
    cout<<num<<' '<<minn<<endl;
    return 0;
}

你可能感兴趣的:(PTA)