[NOIP2017 TG D2T2]宝藏(模拟退火)
题目大意:$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;
}
[NOIP2017 TG D2T2]宝藏(模拟退火)的更多相关文章
- [NOIP2017 TG D2T2]宝藏
题目大意:给定一个有重边,边有权值的无向图.从某一个点出发,求到达所有的点需要的最少费用,并且限制两点之间只有一条路径.费用的计算公式为:所有边的费用之和.而边$x->y$的费用就为:$y$到初 ...
- 【NOIP题解】NOIP2017 TG D2T3 列队
列队,NOIP2017 TG D2T3. 树状数组经典题. 题目链接:洛谷. 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. ...
- [NOIP2018 TG D2T2]填数游戏
题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜. 说明一下把vector改成数组并不可以通过此题,记录. 结论:在$m>n+1$时答案为 ...
- NOIP2017 D2T2宝藏
考场上写的prim一遍过了大样例也没想什么别的,反例也没举出来. 后来才知道由于要乘上深度所以无法贪心. 正解是状压但我不会,考后一个爆搜碾过去了. 心凉. #include<bits/stdc ...
- NOIP2017 D2T2 宝藏
洛谷P3959 其实就是一道暴力搜索题……只是需要一个状态压缩的剪枝比较难想而已 这根本不叫dfs!只是一个递归而已……开始就被dfs坑了 思路: 首先一个基本的预处理 数据范围n≤12,m≤5000 ...
- P3959 宝藏 模拟退火。。。
竟然模拟退火能做!我就直接抄代码了,我加了点注释. 题干: 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 nn 个深埋在地下的宝藏屋, 也给出了这 nn 个宝藏屋之间可供开发的 mm ...
- noip2017 TG 游记
嗨小朋友们大家好,还记得我是谁吗?我就是为GG代言的蒟蒻--xzz 今天呐我特别的要向HN的dalao们ZJ的巨佬们还有全国的神犇们问声好 为什么呢因为我们在2017年11月份来到了吔屎的长沙理工大学 ...
- [NOIP2017 TG D2T3]列队
题目大意:有一个$n \times m$的方阵,第$i$行第$j$列的人的编号是$(i-1) \times m + j$. 现在有$q$个出列操作,每次让一个人出列,然后让这个人所在行向左看齐,再让最 ...
- NOIP2017[提高组] 宝藏 题解
解析 我们观察范围可以发现n非常的小,(一般来说不是搜索就是状压dp)所以说对于这题我们可以用记忆化搜索或者dp,我们发现起点不同那么最终答案也就不同,也就是说答案是跟起点有关的,于是我们便可以想到去 ...
随机推荐
- JAVA Web 项目中用到的技术
JSPServletTomcatMySQL MavenSpringMVCHibernatejQueryBootstrapAngularJSBootStrap Table 下边两个是移动APP开发要用到 ...
- php杂记——2(数组的使用)
1.建立升序数组:range(); $numarr1 = range(1,4); //(1,2,3,4) $numarr2 = range(1,10,2); //(1,3,5,7,9) $letter ...
- 问题:docker pull 用户登陆tricky,Error response from daemon: unauthorized: incorrect username or password
问题描述: PS C:\WINDOWS\system32> docker pull rabbitmqUsing default tag: latest Please login prior to ...
- ibdata1文件损坏时恢复InnoDB单表测试
Preface ibdata1 file is a shared system tablespace of innodb engine.Although we always set v ...
- 「暑期训练」「基础DP」 Common Subsequence (POJ-1458)
题意与分析 很简单:求最长公共子序列. 注意子序列与子串的差别:一个不连续一个连续.一份比较好的参考资料见:https://segmentfault.com/a/1190000002641054 状态 ...
- Leetcode代码补全——链表
通过补全代码可以更深刻的体会到,链表就是一个存储方式,通过一单元的存储指向下一单元,而查看单元内容通过头部开始的指针依次遍历.这是leetcode里融合两个链表的题目,具体代码如下: #encodin ...
- 阿里的100TB Sort Benchmark排序比雅虎快了一倍还多,我的看法
如果我的判断正确,它们使用的软件和算法应该是HADOOP,MAP/REDUCE,或者类似的技术方案.如果这些条件一样,影响计算结果的还有三个因素: 1.CPU的数量和CPU的处理能力 CPU的 ...
- Visual Studio Code 配置Go 开发环境最简单的方法!!!
由于大家都知道的原因,在国内如果想访问go等各种资源,都会遇到某种不可预知的神奇问题.导致在VS Code中安装 go 各种插件都会失败. 于是乎,网上就出现了各种各样的解决方案:什么手动git cl ...
- 《鸟哥的Linux私房菜》读书笔记
第五章 初次使用Linux man.info的使用 组合键:切换登录环境.Tab.Ctrl+c.Ctrl+d 正确关机的方法 开机过程的问题排解:文件系统错误.忘记root密码 第六章 文件权限& ...
- NO11——01背包
# include <stdio.h> # include <stdlib.h> # include <string.h> # define max(x,y) x& ...