题目:
一个旅游景点,如果被带火了的话,就被称为“网红点”。大家来网红点游玩,俗称“打卡”。在各个网红点打卡的快(省)乐(钱)方法称为“攻略”。你的任务就是从一大堆攻略中,找出那个能在每个网红点打卡仅一次、并且路上花费最少的攻略。

输入格式:
首先第一行给出两个正整数:网红点的个数 N(1<N≤200)和网红点之间通路的条数 M。随后 M 行,每行给出有通路的两个网红点、以及这条路上的旅行花费(为正整数),格式为“网红点1 网红点2 费用”,其中网红点从 1 到 N 编号;同时也给出你家到某些网红点的花费,格式相同,其中你家的编号固定为 0。
再下一行给出一个正整数 K,是待检验的攻略的数量。随后 K 行,每行给出一条待检攻略,格式为:n V​1​​ V​2​​ ⋯ V​n
其中 n(≤200) 是攻略中的网红点数,Vi是路径上的网红点编号。这里假设你从家里出发,从V1开始打卡,最后从 Vn回家。

输出格式:

在第一行输出满足要求的攻略的个数。
在第二行中,首先输出那个能在每个网红点打卡仅一次、并且路上花费最少的攻略的序号(从 1 开始),然后输出这个攻略的总路费,其间以一个空格分隔。如果这样的攻略不唯一,则输出序号最小的那个。
题目保证至少存在一个有效攻略,并且总路费不超过 1e9.

输入样例:

6 13
0 5 2
6 2 2
6 0 1
3 4 2
1 5 2
2 5 1
3 1 1
4 1 2
1 6 1
6 3 2
1 2 1
4 5 3
2 0 2
7
6 5 1 4 3 6 2
6 5 2 1 6 3 4
8 6 2 1 6 3 4 5 2
3 2 1 5
6 6 1 3 4 5 2
7 6 2 1 3 4 5 2
6 5 2 1 4 3 6

输出样例:

3
5 11

样例说明:
第 2、3、4、6 条都不满足攻略的基本要求,即不能做到从家里出发,在每个网红点打卡仅一次,且能回到家里。所以满足条件的攻略有 3 条。
第 1 条攻略的总路费是:(0->5) 2 + (5->1) 2 + (1->4) 2 + (4->3) 2 + (3->6) 2 + (6->2) 2 + (2->0) 2 = 14;
第 5 条攻略的总路费同理可算得:1 + 1 + 1 + 2 + 3 + 1 + 2 = 11,是一条更省钱的攻略;
第 7 条攻略的总路费同理可算得:2 + 1 + 1 + 2 + 2 + 2 + 1 = 11,与第 5 条花费相同,但序号较大,所以不输出。

打比赛的时候,疑惑为什么样例说明第3条不满足。卡在了阅读理解上了。

题解:给你k个攻略,每个攻略要求你检查可行性。如果可行(题目保证一定有可行的),再求攻略的最少花费,如果有相同的最少花费攻略,优先输出序号最小的。第一行输出可行的攻略数量,第二行输出最少花费的最小ID和最少花费。
建议用邻接矩阵建图。

可行性:
1、n个点都要访问且只访问一次(用一个vis数组记录一下输入的攻略路线:vis[v[i]]++,检查一下vis[1~n],要求都是1)。2、要求从0出发经过攻略路线再到0要有边连接(在检查的过程中计算花费)。
最少花费ID和最少花费:在可行性的基础上选择一下就好。

补题代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 200+5;
#define inf 0x3f3f3f3f
#define mod 998244353
#define pre(a,b,c) for(int a=b;a<c;a++)
#define pres(a,b,c) for(int a=b;a<=c;a++)
int G[N][N];
int a[N],sum,q,vis[N],n,m;
bool BFS(int s) {
for(int j = 1;j <= n;j++) {
if(vis[j]!=1) {
return false;
}
}
sum = 0;
for(int i = 0;i < q;i++) {
if(G[s][a[i]]==inf) {
return false;
}
sum += G[s][a[i]];
s = a[i];
}
if(G[s][0]==inf) {
return false;
}
sum += G[s][0];
return true;
}
int main() {
cin>>n>>m;
memset(G,inf,sizeof G);
for(int i = 0,u,v,w;i < m;i++) {
cin>>u>>v>>w;
G[u][v] = G[v][u] = w;
}
int mi = inf,k,id,cnt = 0;
cin>>k;
for(int i = 0;i < k;i++) {
cin>>q;
memset(vis,0,sizeof vis);
for(int j = 0;j < q;j++) {
cin>>a[j];
vis[a[j]]++;
}
if(BFS(0)) {
if(mi > sum) {
id = i+1;
mi = sum;
}
cnt++;
}
}
cout<<cnt<<endl;
cout<<id<<' '<<mi<<endl;
}

2020年团体程序设计天梯赛-总决赛 L2-4 网红点打卡攻略的更多相关文章

  1. 团体程序设计天梯赛(CCCC) L3009 长城 方法证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  2. 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  3. 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  4. 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  5. 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  6. 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  7. 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  8. 树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)

    前提是数的范围较小 1 数据范围:O(n) 2 查第k大的数i:log(n)(树状数组查询小于等于i的数目)*log(n)(二分找到i) 3 添加:log(n) (树状数组) 4 删除:log(n) ...

  9. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

随机推荐

  1. vue自定义指令长按事件

    Vue.directive('longpress', {     bind: function (el, binding, vNode) {         // Make sure expressi ...

  2. Dapr Java Http 调用

    版本介绍 Java 版本:8 Dapr Java SKD 版本:0.9.2 Dapr Java-SDK HTTP 调用文档 有个先决条件,内容如下: Dapr and Dapr CLI. Java J ...

  3. Go读取论文并转换为simhahs

    package main import ( "fmt" _"flag" _ "os" _ "io/ioutil" _&q ...

  4. Linux 下 GCC 的使用

    0 运行环境 本机系统:Windows 7 虚拟机软件:Oracle VM VirtualBox 6 虚拟机系统:CentOS 7 1 GCC 简介 GCC 是 GUN Compiler Collec ...

  5. 测试:OGG初始化同步表,源端抽取进程scn<源端事务的start_scn时,这个变化是否会同步到目标库中?

    一.测试目标 疑问,OGG初始化同步表,源端抽取进程开始抽取的scn<源端事务的start_scn时,这个变化是否会同步到目标库中? 二.实验测试 如下进行测试! session 1 SQL&g ...

  6. ceph在centos7下一个不容易发现的改变

    在centos6以及以前的osd版本,在启动osd的时候,回去根据ceph.conf的配置文件进行挂载osd,然后进行进程的启动,这个格式是这样的 [osd.0] host = hostname de ...

  7. 深入理解h2和r2dbc-h2

    简介 本文将会介绍R2DBC的H2实现r2dbc-h2的使用方法和要注意的事项.一起来看看吧. H2数据库简介 什么是H2数据库呢? H2是一个Java SQL database,它是一个开源的数据库 ...

  8. JS控制Video播放器(快进、后退、播放、暂停、音量大小)

    思路: 一.首先监听触发事件. 比如:向上键对应的keyCode为38,向下键对应的keyCode为40,向左键对应的keyCode为37,向右键对应的keyCode为39,空格键对应的keyCode ...

  9. 建议收藏!超详细的JVM反射原理技术点总结

    反射定义 1,JAVA反射机制是在运行状态中 对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称 ...

  10. 新鲜出炉!2020年最新java面试题大全,面试突击必备!

    前言 发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了一套Java面试题,希望对大家有帮助哈~ 打算这几天每天更新15~20题.(这样有助于你们阅读和理解!)我们先从简单的开始 1 ...