因为点数很少,考虑用folyd搜完两两最短路,然后DFS生成朋友位置序列的全排列,每一个排列就是一个路径,累加两两之间的距离,不断更新一个最短路径值即可。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <sstream>
#include <cmath>
#include <queue>
#include <bitset>
#include <vector>
#include <map>
#define int long long
#define endl '\n'
#define lowbit(x) x &(-x)
#define mh(x) memset(x, -1, sizeof h)
#define debug(x) cerr << #x << "=" << x << endl;
#define brk exit(0);
using namespace std;
const int N = 1e3 + 10;
const int M = 2 * N;
const int INF = 0x3f3f3f3f;
const int mod = 998244353;
const double esp = 1e-6;
const double pi = acos(-1);
typedef pair<int, int> PII;
typedef long long ll;
int n, m, k;
int g[N][N];
bool st[N];
int a[N];
void floyd()
{for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
}
int dfs(int u, int start, int dist)
{if (u > k){return dist + g[start][n];}int res = INF;for (int i = 1; i <= k; i++){if (!st[i]){int next = a[i];st[i] = true;res = min(res, dfs(u + 1, next, dist + g[start][next]));st[i] = false;}}return res;
}
void solve(int T)
{cin >> n >> m >> k;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)if (i == j)g[i][j] = 0;elseg[i][j] = INF;while (m--){int a, b, c;cin >> a >> b >> c;g[a][b] = min(g[a][b], c);g[b][a] = min(g[b][a], c);}for (int i = 1; i <= k; i++)cin >> a[i];sort(a + 1, a + 1 + k);floyd();cout << "Case " << T << ": " << dfs(1, 1, 0) << endl;
}
signed main()
{cin.tie(0)->sync_with_stdio(0);int T;cin >> T;for (int i = 1; i <= T; i++)solve(i);return 0;
}

H - Weekend(folyd+全排列)相关推荐

  1. 2018年全国多校算法寒假训练营练习比赛(第四场)

    地址:点击打开链接 A 石油采集 思路: 二维矩阵四连通图是一个二分图,其实仔细想想就是将相邻的"#"建图,然后在找最大匹配.匈牙利算法即可.也可以dfs,代码如下: 匈牙利: # ...

  2. 字符串全排列的问题 python和c语言实现

    前言 这是一个的经典的问题 设计一个算法,输出一个字符串字符的全排列. 比如,String = "abc" 输出是"abc","bac",& ...

  3. #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)

    题目链接:http://codeforces.com/contest/814/problem/B 题意 : 有一个给出两个含有 n 个数的序列 a 和 b, 这两个序列和(1~n)的其中一个全排列序列 ...

  4. PTA—输出全排列 (20分) 递归回溯思想

    PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...

  5. 全排列:不含重复元素和含重复元素的全排列

    1.不含重复元素 算法思路: 1.n个元素全排列 = (n-1)个元素的全排列+(另一个元素作为前缀) 2.出口:如果只有一个元素的全排列,则说明已经排完,输出数组: 3.不断将每个元素放在第一个元素 ...

  6. C++递归与非递归实现全排列

    参考文章:http://blog.csdn.net/morewindows/article/details/7370155 http://plutoblog.iteye.com/blog/976216 ...

  7. 字符串的全排列和组合算法

    转载http://blog.csdn.net/hackbuteer1/article/details/7462447,感谢Hackbuteer1. 全排列在笔试面试中很热门,因为它难度适中,既可以考察 ...

  8. 练习友元函数,有元类,快排和全排列问题

    写了一小段代码: 练习一下友元类和友元函数的声明和使用: 练习一下最简单的快排算法: 练习一下递归的方法处理全排列问题. 代码: 1 #include <stdlib.h> 2 #incl ...

  9. 八皇后时间复杂度_LeetCode46:全排列(八皇后)

    前言 本系列文章为<leetcode>刷题笔记. 题目位置:力扣中国 项目位置:我的Github项目 题目 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2, ...

最新文章

  1. Android线程管理(一)
  2. wsl2 Ubuntu 18.04 安装 ROS
  3. linux使用设备文件的目录,Linux系统下的/dev目录
  4. datetime 索引_MySQL 性能优化:MySQL 中的隐式转换造成的索引失效
  5. 农场管理软件行业调研报告 - 市场现状分析与发展前景预测
  6. Python3笔记——IDE的选择
  7. svn钩子自动化同步代码提交任务
  8. 一维热传导方程求数值解
  9. phpStudy JspStudy 2016 更新下载,新版支持php7.0
  10. 让电脑假装蓝屏的C语言,【技术天地】一句命令让你的电脑蓝屏~(有强迫症的童鞋试试~~)...
  11. 大数据组件监控体系构建
  12. 【DPD数字预失真】射频功放的Volterra级数数字预失真系统开发
  13. gis生成道路中心线_ArcGIS方法-利用到路面提取道路中心线的方法
  14. css样式border-radius学习-画出水滴
  15. js 占位符 正则_带占位符的正则表达式
  16. 如何设置文档背景颜色
  17. 【可见光室内定位】(一)概览
  18. 解决Cannot create PoolableConnectionFactory (Access denied for user 'xxx'@'xxx.xxx.xx.xxx' (using pas
  19. keepalived+lvs结合nginx压力测试实践
  20. Cocos Creator | 通过 effect 实现卷轴展开和收拢效果

热门文章

  1. 快速修改oracle默认端口号,解除对8080的占用
  2. chap2 kNN算法 2.2.2 分析数据:使用Matplotlib创建散点图
  3. 关于支付漏洞方式的测试
  4. 怎么把照片的四个角修成弧形
  5. mysql federated_MySQL FEDERATED引擎
  6. 机床数据采集之马扎克(Mazak)Smart CNC IP地址设置
  7. arma自回归matlab,基于MATLAB的自回归移动平均模型_ARMA_在股票预测中的应用
  8. 什么样的品牌设计公司比较好?
  9. 亲手打造一个QQ恶作剧程序
  10. 换发暂住证,迎接奥运会?