题目大意:$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. c#课程设计---猜猜看游戏
  3. python伪造邮件发件地址_python写一个邮箱伪造脚本
  4. 分布式任务队列 Celery — Overview
  5. python【数据结构与算法】程序设计:划分整数(DP)
  6. python输出csv文件-Python之读取与写入CSV文件
  7. Swift iOS : WebView缓存图片的方法
  8. Android开发;Activity-Hook你了解多少?一起来debug
  9. ERROR: Start Page at 'www/index.html' was not found
  10. 训练日志 2019.1.24
  11. Docker 1.0对OpenStack意味着什么
  12. STM32工作笔记001---认识开发板资源-以正点原子战舰版开发板为例
  13. vs2017安装完成,但有错误。
  14. [PhoneGap]Mac下搭建PhoneGap开发环境
  15. SpringBoot开发案例之异常处理并邮件通知
  16. 如何批量压缩图片体积大小kb?
  17. java实现康威生命游戏
  18. 利用python将微信聊天记录生成词云
  19. 数据库系统概论--第六章 关系数据理论
  20. 新浪微博、腾讯微博、QQ空间、人人网、豆瓣 一键分享API代码参数

热门文章

  1. io.js入门(三)—— 所支持的ES6(下)
  2. pptx库ppt演示 python_详解 Python 操作 PPT 的各种骚操作!
  3. ireport导出pdf后中文字符全部不显示(已解决)
  4. gridview自动编号
  5. flex中list或Combox中的子项上移下移操作
  6. 论文笔记-LSHTC: A Benchmark for Large-Scale Text Classification-2015
  7. 嘉兴 机器人仓库 菜鸟_“199”机器人火了,天猫双11,有1亿人次“云监工”物流发货...
  8. 2018-05-16树莓派如何开启UART串口
  9. ArcGIS制图表达Representation-制图表达使用须知
  10. android 蓝牙通信编程