题目链接

problem

有\(n\)个点,\(m\)条无向边,选择一个点开始开辟道路。开辟一条长度为\(L\)的链接\(u,v\)的道路会花费\(L \times K\),K表示从选择的最初点到\(u\)所经过的点的数量。

solution

因为n比较小,所以可以状态压缩。第\(i\)位为1表示当前已经开辟了第\(i\)个点。枚举一个最初的状态,然后每次枚举下一个开辟的边得到下一个状态,转移即可。

转移的过程中要维护出每个状态到初始点的距离。

code

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#include<vector>
#include<algorithm>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 1 << 13;
ll read() {
ll x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
int dis[110][110];
int n,m,f[N],a[N][14],vis[N];
queue<int>q;
int solve(int x) { memset(f,0x3f,sizeof(f));
memset(a,0x3f,sizeof(a));
memset(vis,0,sizeof(vis));
for(int i = 1;i <= n;++i) {
if(x >> (i - 1) & 1) {
a[x][i] = 1;break;
}
}
f[x] = 0;
vis[x] = 1;
q.push(x); while(!q.empty()) {
int u = q.front();q.pop();
for(int i = 1;i <= n;++i) {
if(u >> (i - 1) & 1) {
for(int j = 1;j <= n;++j) {
if(u >> (j - 1) & 1) continue;
int v = u | (1 << (j - 1));
if(dis[i][j] != 0x3f3f3f3f && f[v] > f[u] + a[u][i] * dis[i][j]) {
f[v] = f[u] + a[u][i] * dis[i][j];
for(int k = 1;k <= n;++k) a[v][k] = a[u][k];
a[v][j] = a[u][i] + 1;
if(!vis[v]) q.push(v),vis[v] = 1;
}
}
}
}
}
return f[(1 << n) - 1];
}
int main() {
n = read(),m = read();
memset(dis,0x3f,sizeof(dis));
for(int i = 1;i <= m;++i) {
int u = read(),v = read(),w = read();
dis[v][u] = dis[u][v] = min(dis[u][v],w);
} int ans = 1e9; for(int i = 0;i < n;++i) ans = min(ans,solve(1 << i));
cout<<ans;
return 0;
}

Noip2017Day2T2 宝藏的更多相关文章

  1. 算法:poj1066 宝藏猎人问题。

    package practice; import java.util.Scanner; public class TreasureHunt { public static void main(Stri ...

  2. 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Stat ...

  3. zzulioj 1907小火山的宝藏交易(dfs记忆化搜索)

    #include <stdio.h> #include <algorithm> #include <string.h> #include <vector> ...

  4. codevs3196 黄金宝藏

    题目描述 Description 小毛终于到达宝藏点,他意外地发现有一个外星人(名叫Pluto).宝藏是一些太空黄金,有n堆排成一行,每堆中有xi颗黄金.小毛和Pluto决定轮流从中取出黄金,规则是每 ...

  5. bzoj 1924 [Sdoi2010]所驼门王的宝藏(构图,SCC,DP)

    Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...

  6. (zzuli)1907 小火山的宝藏收益

    Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通. 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这个房间的宝藏, ...

  7. zzuli 1907: 小火山的宝藏收益 邻接表+DFS

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 113  Solved: 24 SubmitStatusWeb Board Description    ...

  8. [SDOI2010]所驼门王的宝藏

    题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...

  9. [51nod1474]宝藏图

    有n堆宝藏,每一堆宝藏有一个挖掘所需要的时间ti,有一个价值qi. 现在是做一个宝藏图.这个宝藏图是这样的,宝藏图的形状是一棵二叉树,二叉树刚好有k个叶子结点,从n堆宝藏中选k堆放到二叉树的叶子结点上 ...

随机推荐

  1. 第K个语法符号

    在第一行我们写上一个 0.接下来的每一行,将前一行中的0替换为01,1替换为10. 给定行数 N 和序数 K,返回第 N 行中第 K个字符.(K从1开始) 例子: 输入: N = 1, K = 1输出 ...

  2. Think in Java 笔记(chapter1-7)

    Content Chapter 1:对象导论 Chapter 2:一切都是对象 Chapter 3:操作符 Chapter 4:控制执行流程 Chapter 5:初始化与清理 Chapter 6:访问 ...

  3. 10. Go 语言反射

    Go 语言反射 反射是指在程序运行期对程序本身进行访问和修改的能力.程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分.在运行程序时,程序无法获取自身的信息. 支持反射的语言可以在 ...

  4. Java之属性集(Properties类)

    Properties概述 java.util.Properties类 继承于 Hashtable ,来表示一个持久的属性集.它使用键值结构存储数据,每个键及其对应值都是一个字符串.该类也被许多Java ...

  5. SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.Actuator简介 1.监控组件作用 在生产环境中,需要实时 ...

  6. java 实现文件下载中文名不显示

    需要将指定字符串的编码转换成浏览器里面的ISO-8859-1编码 String name = new String(name.getBtes("utf-8"),"ISO- ...

  7. C# 重置IE安全等级

    打开IE设置-安全 dynamic shellObject = Interaction.CreateObject("WScript.Shell", ""); / ...

  8. javaWeb核心技术第十篇之Filter

    Web中有三大组件(需要配置web.xml) servlet:服务器端的小程序. Filter(过滤器):运行在服务器,对请求的资源进行过滤,对响应进行包装. 经典案例: 自动登录,网站全局编码,非法 ...

  9. jenkins-pipeline里使用docker命令

    在jenkins的pipeline里,就是jenkinsfile文件里,如果希望调用docker来构建镜像,需要进行以下配置! tools{}里添加docker是失败的,这个我找了很多资料,最后需要e ...

  10. 高强度学习训练第十六天总结: Spring框架中的设计模式

    仔细想了想..没必要重复造轮子. 每天复习啥了就直接CTRL CV了 https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/system-de ...