L2-4 网红点打卡攻略
Time limit:400ms
Memory limit:64MB
简单模拟一下
ac代码:
#include<bits/stdc++.h>
using namespace std;
#define
int N,M,n; //如题
int f,t,w;
int now; //目前的位置
int sum; //每条线路的费用和
int mini = 1e9; //记录最小的线路
int mp[205][205]; //存储图
int k; //记录哪条线路是最小的
int note; //记录有多少条线路是可行的
signed main(){
cin>>N>>M;
for(int i = 1;i <= M;++i)
cin>>f>>t>>w,mp[f][t] = mp[t][f] = w;
cin>>t;
for(int j = 1;j <= t;++j){ //有t条线路
now = sum = 0; //初始化现在的位置在家,费用和为0
cin>>n; //每条线经过的网红点数
bool f1 = 0; //标记线路是否可行
bool pick[205]; //记录哪些网红点出现过
memset(pick,0,sizeof(pick));
for(int i = 1;i <= n;++i){
cin>>f;
pick[f] = 1;
if(mp[now][f])
sum += mp[now][f],now = f; //如果有这条边,则继续累加
else
f1 = 1; //不存在则不可行
}
if(mp[now][0]) //同上
sum += mp[now][0];
else
f1 = 1;
if(n != N)
f1 = 1;
else
for(int i = 1;i <= n;++i)
if(!pick[i])
f1 = 1;
if(!f1)
++note;
else
continue;
if(mini > sum)
mini = sum,k = j;
}
cout<<note<<"\n"<<k<<" "<<mini;
return 0;
}