博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOIP2017 TG D2T2]宝藏(模拟退火)
阅读量:6279 次
发布时间:2019-06-22

本文共 1744 字,大约阅读时间需要 5 分钟。

题目大意:$NOIPD2T2$宝藏

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

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

 

C++ Code:

#include 
#include
#include
#include
#include
#define maxn 14const 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
(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
(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

你可能感兴趣的文章
Redis Master-Slave 读写分离测试
查看>>
git bash常用命令行以及初次接触yo以及bower
查看>>
修改MySQL默认空密码
查看>>
spring mvc访问静态文件(css/js/img)访问不到
查看>>
spring boot框架学习学前掌握之重要注解(1)-sprng的java配置方式
查看>>
plsql 书籍基础表结构
查看>>
nginx 第三方模块 modsecurity安装使用
查看>>
Kettle使用问题记录
查看>>
Android 透明(沉浸式)状态栏设计
查看>>
关于UIView的autoresizingMask属性
查看>>
sparkSQL UDF创建
查看>>
spring4中获取泛型的bean
查看>>
Ansible notes
查看>>
js实现二叉树
查看>>
【工具使用系列】关于 MATLAB 硬件通讯
查看>>
(三)SpringBoot——模板引擎thymeleaf
查看>>
web应用路径获取实例
查看>>
建立发布智能合约
查看>>
在Lucene或Solr中实现高亮的策略
查看>>
从零开始制作2048游戏
查看>>