JZOJ 2933. 【NOIP2012模拟8.7】找位置
题目大意
有 \(n(1 \leq n \leq 10000)\) 个城镇,由 \(1 \leq m \leq 50000\) 条无向道路连接。给出 \(k(1 \leq k \leq 5) 个超市\),现于剩下 \(n-k\) 个城镇中选择一个,使它到所有有超市的城镇再回来总路程最短
分析
注意到 \(k\) 很小,那我们就可以枚举经过这些超市的顺序,然后依次走最短路,再枚举一个另外出发城镇,由最后一个超市返回
于是就完了
\(Code\)
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N = 10005 , M = 50005;
int n , m , k , tot , cnt;
int a[N] , used[10] , b[10] , order[200][10] , vis[N] , dis[10][N] , h[N];
struct edge{
int to , nxt , w;
}e[M << 1];
struct node{
int id , d;
bool operator < (node c) const {return d > c.d;}
};
priority_queue<node> q;
void add(int u , int v , int w){e[++tot] = edge{v , h[u] , w} , h[u] = tot;}
void dij(int s)
{
memset(vis , 0 , sizeof(vis));
for(register int i = 1; i <= n; i++) dis[s][i] = 1e8;
dis[s][a[s]] = 0;
while (!q.empty()) q.pop();
q.push((node){a[s] , 0});
while (!q.empty())
{
node x = q.top();
q.pop();
if (vis[x.id]) continue;
vis[x.id] = 1;
for(register int i = h[x.id]; i; i = e[i].nxt)
if (dis[s][x.id] + e[i].w < dis[s][e[i].to])
{
dis[s][e[i].to] = dis[s][x.id] + e[i].w;
q.push((node){e[i].to , dis[s][e[i].to]});
}
}
}
void dfs(int x)
{
if (x > k)
{
++cnt;
for(register int i = 1; i <= k; i++) order[cnt][i] = b[i];
return;
}
for(register int i = 1; i <= k; i++)
if (!used[i])
{
used[i] = 1 , b[x] = i , dfs(x + 1);
used[i] = 0 , b[x] = 0;
}
}
void solve()
{
int ans = 2e9;
dfs(1);
for(register int i = 1; i <= k; i++) dij(i);
memset(vis , 0 , sizeof vis);
for(register int i = 1; i <= k; i++) vis[a[i]] = 1;
for(register int i = 1; i <= cnt; i++)
{
int sum = 0;
for(register int j = 2; j <= k; j++) sum = sum + dis[order[i][j - 1]][a[order[i][j]]];
if (sum > ans) continue;
int Mi = 1e8;
for(register int j = 1; j <= n; j++)
if (!vis[j]) Mi = min(Mi , sum + dis[order[i][1]][j] + dis[order[i][k]][j]);
ans = min(ans , Mi);
}
printf("%d" , ans);
}
int main()
{
scanf("%d%d%d" , &n , &m , &k);
for(register int i = 1; i <= k; i++) scanf("%d" , &a[i]);
int u , v , w;
for(register int i = 1; i <= m; i++)
scanf("%d%d%d" , &u , &v , &w) , add(u , v , w) , add(v , u , w);
solve();
}
JZOJ 2933. 【NOIP2012模拟8.7】找位置的更多相关文章
- JZOJ【NOIP2012模拟8.9】2020.10.5 T1
逐个击破 题目 Description 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走, ...
- JZOJ【NOIP2013模拟联考14】隐藏指令
JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...
- 【NOIP2012模拟8.7】JZOJ2020年8月8日提高组T1 奶牛编号
[NOIP2012模拟8.7]JZOJ2020年8月8日提高组T1 奶牛编号 题目 作为一个神秘的电脑高手,Farmer John 用二进制数字标识他的奶牛. 然而,他有点迷信,标识奶牛用的二进制数字 ...
- JOBDU 1199 找位置
题目1199:找位置 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2645 解决:1286 题目描述: 对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 ...
- string反向找位置,分割字符串(只取文件夹路径)
1 #include <uf.h> 2 #include <uf_part.h> 3 #include <atlstr.h> 4 #include <iost ...
- 【九度OJ】题目1199:找位置 解题报告
[九度OJ]题目1199:找位置 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1199 题目描述: 对给定的一个字符串,找出有重复的 ...
- <数据结构>XDOJ333.找位置
问题与解答 问题描述 对给定的一个字符串,找出有重复的字符,并给出其位置. 输入格式 输入包括一个由字母和数字组成的字符串,其长度不超过100. 输出格式 可能有多组测试数据,对于每组数据, 按照样例 ...
- [jzoj]2938.【NOIP2012模拟8.9】分割田地
Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...
- 九度OJ 1199:找位置 (计数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2083 解决:1010 题目描述: 对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1:a,4 ...
- [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)
interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...
随机推荐
- 2022年鲜为人知的CSS 特性了解起来~
前言 随着CSS的不断发展,一些很酷且有用的属性要么完全被忽视,要么由于某种原因不像其他常见属性那样被开发者熟练应用.这篇文章我们将一起学习那些CSS中陌生但非常有用的CSS属性,这些属性你可能听说过 ...
- DHorse的链路追踪
目前,DHorse的链路追踪功能是通过SkyWalking来实现.实现原理是DHorse在部署应用时,通过指定SkyWalking的Agent来收集服务的调用链路信息.下面就来具体看一下DHorse如 ...
- 【PostgreSQL】PG通过SQL语句读取二进制bytea类型并进行二进制和十六进制转换
1.将二进制编码为十六进制 select encode("AUUID_0",'hex'),"AUUID_0" from wxf_test."ABANK ...
- 【每日一题】【栈】2022年2月2日-NC40 两个链表生成相加链表
描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. 答案:栈 import java.util.*; /* ...
- view-design tabpane禁用后renderHeader失效问题
需求是这样的 在tabPane的renderHeader里面添加hover事件(使用组件自带的Poptip)能显示提示 其实这个不算是问题,设置disabled属性后,原本的元素上面添加了 ivu-t ...
- Docker进阶-Dockerfile建立一个自定义的镜像执行自定义进程
前言 docker对我来说是一个很方便的工具,,上一篇文章也写了docker基本的一些使用,这篇文章重点描述一下Dockerfile的使用,从零建立一个自己定制化的镜像,并可以执行我们需要的任务. 作 ...
- 深度学习GPU加速配置方法
深度学习GPU加速配置方法 一.英伟达官方驱动及工具安装 首先检查自己的电脑驱动版本,未更新至最新建议先将驱动更新至最新,然后点击Nvidia控制面板 2.在如下界面中点击系统信息,点击显示可以看见当 ...
- C# 11新特性之file关键字
C#11 添加了文件作用域类型功能:一个新的 file 修饰符,可以应用于任何类型定义以限制其只能在当前文件中使用.这样,我们可以在一个项目中拥有多个同名的类. 目录 示例 file不可以与其他修饰符 ...
- Nmap常用方法
1.扫描单个目标地址 在Nmap后面直接添加目标地址即可扫描 nmap 目标地址 2.扫描多个目标地址 如果目标不在同一网段,或在同一网段但不连续且数量不多,可以使用该方法进行扫描 nmap ...
- css实习滤镜效果(背景图模糊)
模糊实例 图片使用高斯模糊效果: img { -webkit-filter: blur(5px); /* Chrome, Safari, Opera */ filter: blur(5px); } c ...