博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
次小生成树 - 堆优化
阅读量:6457 次
发布时间:2019-06-23

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

const int inf = 1<<29;int n, m;int edge[105][105];bool vis[105];int d[105];int mm[105][105];int pre[105];bool used[105][105];struct node{    int v, c;    node(int _v = 0, int _c = 0):v(_v), c(_c){}    friend bool operator< (node n1, node n2){        return n1.c > n2.c;    }};int ans, ans2;void prim(){    priority_queue
que; while(!que.empty()) que.pop(); memset(mm, 0, sizeof(mm)); memset(pre, 0, sizeof(pre)); memset(used, false, sizeof(used)); memset(vis, false, sizeof(vis)); for(int i = 1; i <= n; i++){ d[i] = edge[1][i]; pre[i] = 1; if (d[i] < inf) { que.push(node(i, d[i])); } } vis[1] = true; ans = 0; int cnt = 0; while(!que.empty()){ node tem = que.top(); que.pop(); int v = tem.v; int c = tem.c; if (vis[v]) continue; vis[v] = true; ans += c; cnt++; used[v][pre[v]] = used[pre[v]][v] = true; for(int i = 1; i <= n; i++){ if (vis[i]) mm[i][v] = mm[v][i] = max(d[v], mm[i][pre[v]]); if (!vis[i] && edge[v][i] < d[i]){ d[i] = edge[v][i]; pre[i] = v; que.push(node(i, d[i])); } } if (cnt == n - 1) break; } if (cnt < n-1) ans = -1;}void fun(){ ans2 = inf; for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ if (!used[i][j] && edge[i][j] < inf){ ans2 = min(ans2, ans+edge[i][j]-mm[i][j]); } } }}

 

转载于:https://www.cnblogs.com/ccut-ry/p/7815620.html

你可能感兴趣的文章
css3 选择器
查看>>
Linux内核代码
查看>>
十、python开发之装饰器
查看>>
显式等待-----Selenium快速入门(十)
查看>>
Python中操作Redis
查看>>
Web页面速度测试工具
查看>>
SpringBoot与Lombok
查看>>
sql中on和where的区别
查看>>
将一个链表中倒数第n个节点删除
查看>>
iOS UIViewController 的automaticallyAdjustsScrollViewInsets属性
查看>>
Java中对象创建过程
查看>>
C++中void型指针
查看>>
区块链 (一)——基础
查看>>
左右不断循环滚动
查看>>
Matplot相关(二)——统计图
查看>>
中间件
查看>>
WCF 第二章 契约 总结
查看>>
仿淘宝使用flex布局实现页面顶部和底部的固定布局
查看>>
我的Android进阶之旅------>Android之选项卡(TabHost)的功能和用法
查看>>
sqlserver 存入DB中的中文乱码
查看>>