H - Weekend(folyd+全排列)
因为点数很少,考虑用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+全排列)相关推荐
- 2018年全国多校算法寒假训练营练习比赛(第四场)
地址:点击打开链接 A 石油采集 思路: 二维矩阵四连通图是一个二分图,其实仔细想想就是将相邻的"#"建图,然后在找最大匹配.匈牙利算法即可.也可以dfs,代码如下: 匈牙利: # ...
- 字符串全排列的问题 python和c语言实现
前言 这是一个的经典的问题 设计一个算法,输出一个字符串字符的全排列. 比如,String = "abc" 输出是"abc","bac",& ...
- #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)
题目链接:http://codeforces.com/contest/814/problem/B 题意 : 有一个给出两个含有 n 个数的序列 a 和 b, 这两个序列和(1~n)的其中一个全排列序列 ...
- PTA—输出全排列 (20分) 递归回溯思想
PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...
- 全排列:不含重复元素和含重复元素的全排列
1.不含重复元素 算法思路: 1.n个元素全排列 = (n-1)个元素的全排列+(另一个元素作为前缀) 2.出口:如果只有一个元素的全排列,则说明已经排完,输出数组: 3.不断将每个元素放在第一个元素 ...
- C++递归与非递归实现全排列
参考文章:http://blog.csdn.net/morewindows/article/details/7370155 http://plutoblog.iteye.com/blog/976216 ...
- 字符串的全排列和组合算法
转载http://blog.csdn.net/hackbuteer1/article/details/7462447,感谢Hackbuteer1. 全排列在笔试面试中很热门,因为它难度适中,既可以考察 ...
- 练习友元函数,有元类,快排和全排列问题
写了一小段代码: 练习一下友元类和友元函数的声明和使用: 练习一下最简单的快排算法: 练习一下递归的方法处理全排列问题. 代码: 1 #include <stdlib.h> 2 #incl ...
- 八皇后时间复杂度_LeetCode46:全排列(八皇后)
前言 本系列文章为<leetcode>刷题笔记. 题目位置:力扣中国 项目位置:我的Github项目 题目 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2, ...
最新文章
- Android线程管理(一)
- wsl2 Ubuntu 18.04 安装 ROS
- linux使用设备文件的目录,Linux系统下的/dev目录
- datetime 索引_MySQL 性能优化:MySQL 中的隐式转换造成的索引失效
- 农场管理软件行业调研报告 - 市场现状分析与发展前景预测
- Python3笔记——IDE的选择
- svn钩子自动化同步代码提交任务
- 一维热传导方程求数值解
- phpStudy JspStudy 2016 更新下载,新版支持php7.0
- 让电脑假装蓝屏的C语言,【技术天地】一句命令让你的电脑蓝屏~(有强迫症的童鞋试试~~)...
- 大数据组件监控体系构建
- 【DPD数字预失真】射频功放的Volterra级数数字预失真系统开发
- gis生成道路中心线_ArcGIS方法-利用到路面提取道路中心线的方法
- css样式border-radius学习-画出水滴
- js 占位符 正则_带占位符的正则表达式
- 如何设置文档背景颜色
- 【可见光室内定位】(一)概览
- 解决Cannot create PoolableConnectionFactory (Access denied for user 'xxx'@'xxx.xxx.xx.xxx' (using pas
- keepalived+lvs结合nginx压力测试实践
- Cocos Creator | 通过 effect 实现卷轴展开和收拢效果
热门文章
- 快速修改oracle默认端口号,解除对8080的占用
- chap2 kNN算法 2.2.2 分析数据:使用Matplotlib创建散点图
- 关于支付漏洞方式的测试
- 怎么把照片的四个角修成弧形
- mysql federated_MySQL FEDERATED引擎
- 机床数据采集之马扎克(Mazak)Smart CNC IP地址设置
- arma自回归matlab,基于MATLAB的自回归移动平均模型_ARMA_在股票预测中的应用
- 什么样的品牌设计公司比较好?
- 亲手打造一个QQ恶作剧程序
- 换发暂住证,迎接奥运会?