题目大意:$NOIPD2T2$宝藏

题解:正常做法:状压DP 。这次模拟退火,随机一个排列,$O(n^2)$贪心按排列的顺序加入生成树

卡点:没开$long\;long$,接受较劣解时判断打错,没判$n=1​$的情况

C++ Code:

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#define maxn 14
const int inf = 0x3f3f3f3f;
const int Tim = 20;
const double ST = 500, DelT = 0.9, eps = 1e-5;inline int min(int a, int b) {return a < b ? a : b;}
inline double rand_d() {return static_cast<double> (rand()) / RAND_MAX;}int n, m;
int e[maxn][maxn];
int dep[maxn];struct node {int s[maxn];long long ans;inline long long calc() {ans = 0;dep[s[1]] = 1;for (register int i = 2; i <= n; i++) {long long MIN = inf;for (register int j = 1; j < i; j++) if (e[s[i]][s[j]] != inf) {long long tmp = static_cast<long long> (dep[s[j]]) * e[s[i]][s[j]];if (tmp < MIN) MIN = tmp, dep[s[i]] = dep[s[j]] + 1;}ans += MIN;}return ans;}
} ans, now, nxt;void SA() {double T = ST;long long del;now = ans;while (T > eps) {int x = rand() % n + 1, y = rand() % n + 1;while (x == y) x = rand() % n + 1, y = rand() % n + 1;nxt = now;std::swap(nxt.s[x], nxt.s[y]);del = nxt.calc();if (del < now.ans || exp((now.ans - del) / T) > rand_d()) now = nxt;if (del < ans.ans) ans = nxt;T *= DelT;}
}int main() {srand(20040826);scanf("%d%d", &n, &m);if (n == 1) {puts("0");return 0;}for (int i = 1; i < n; i++) {for (int j = i + 1; j <= n; j++) e[i][j] = e[j][i] = inf;}for (int i = 1, a, b, c; i <= m; i++) {scanf("%d%d%d", &a, &b, &c);e[b][a] = e[a][b] = min(e[a][b], c);}int __Tim = Tim;for (int i = 1; i <= n; i++) ans.s[i] = i;ans.calc();while (__Tim --> 0) SA();printf("%lld\n", ans.ans);return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/9922815.html

[NOIP2017 TG D2T2]宝藏(模拟退火)相关推荐

  1. [NOIP2017 TG D2T2]宝藏

    题目大意:给定一个有重边,边有权值的无向图.从某一个点出发,求到达所有的点需要的最少费用,并且限制两点之间只有一条路径.费用的计算公式为:所有边的费用之和.而边$x->y$的费用就为:$y$到初 ...

  2. P3959 [NOIP2017 提高组] 宝藏

    P3959 [NOIP2017 提高组] 宝藏 题意: 额题意不好说,就是n个点m个边,选定一个点为根节点,构造一个最小生成树,边的权值为该该边起点到根节点之间的点的数量K(不含根节点) * 道路长度 ...

  3. 【NOIP题解】NOIP2017 TG D2T3 列队

    列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...

  4. [SinGuLaRiTy] NOIP2017 提高组

    [SinGuLaRiTy-1048] Copyright (c) SinGuLaRiTy 2018. All Rights Reserved. NOIP2017过了这么久,现在2018了才找到寒假这么 ...

  5. CSP -S1/J1 初赛复习

    目录 写在前面 文件大小计算 位图大小的计算 进制转换 二进制转十进制 / K进制转十进制 八进制 / 十六进制 与二进制的互相转换 时间复杂度计算 求通项公式法 蒙猜法 零碎知识 CCF颂歌 计算机 ...

  6. 状压dp个人刷题记录

    目录 一.普通型 蒙德里安的梦想 题意: 思路: code: #2153. 「SCOI2005」互不侵犯 题意: 思路: code: P1879 [USACO06NOV]Corn Fields G 题 ...

  7. 简单的题解 属2017

    -- 待补充 P3958 [NOIP2017 提高组] 奶酪 刷过,当时没一次过 因为没看出来是dfs,以及没有交代码前编译 P3959 [NOIP2017 提高组] 宝藏 两次没过,第三次过了,最后 ...

  8. 『宝藏 状态压缩DP NOIP2017』

    宝藏(NOIP2017) Description 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的m 条道路和它们的长度. 小明决 ...

  9. #333. 【NOIP2017】宝藏

    #333. [NOIP2017]宝藏 http://uoj.ac/problem/333 1.错误的$n^42^n$做法: dp[s]表示当前的点集为s,然后从这些点中选一个做起点i,然后枚举边,然后 ...

最新文章

  1. 江边上洗萝卜——一个个来
  2. XeLaTeX插入GB/T 7714-2005规范的参考文献方法
  3. mybatis框架中的mapper.xml文件中的头部代码
  4. typescript函数使用
  5. overflow妙用--去除默认滚动条,内容仍可滚动
  6. Flask学习之旅--数据库
  7. Java类加载器( 死磕9)
  8. 混合编程:如何用pybind11调用C++
  9. jenkins source files 和 Remove Prefix 用户
  10. 2020.2idea怎么创建html项目_如何为IDEA项目创建GitHub存储库和本地Git存储库
  11. 定时器_STM32通用定时器
  12. SoberGGG对针式PKM的初次测评
  13. matlab信号系统响应实验,信号与系统实验(MATLAB版) (1)
  14. DBC文件编写概述 及 CANoe 使用DBC分析信号
  15. 动态规划-二维dp数组和滚动数组
  16. javascript书签工具
  17. python程序turtle雪人_用turtle画一个雪人
  18. CCT Camera Tuning
  19. 尝试做一个好的技术Leader, 建立“去中心化团队”
  20. 基于java大学生创业众筹系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. FPGA实现VGA显示(五)——————配置ROM测试及图片显示(b)
  2. 防碰撞算法c语言,RFID防碰撞 二进制树形搜索算法 C语言实现
  3. spring初始化在ServletContextListener实现类中获取spring注入对象
  4. java中a 和 a_Java中a=a++ 和 a=++a(轉)
  5. 总结一下最近面试经常被问到的问题
  6. 计算机出现全部英文如何解决,电脑打开后出现很多英文怎么处理
  7. linux grub内核选择,UBUNTU GRUB没有内核选项,怎么回事啊?
  8. oracle无法减小列长度,中国港湾扩展表单分配时调整字段后保存时报错,无法正常维护表单定义...
  9. 2018年php还是python好_2018年PHP还值得学习吗?
  10. Google FlatBuffers——开源、跨平台的新一代序列化工具