ZOJ 1586 QS Network prim优化模板
来源:互联网 发布:mmorpg推荐 知乎 编辑:程序博客网 时间:2024/05/29 17:04
链接:
1586
题意:
有一个N X N的网络,每两个点都有边相连,边的权值用邻接矩阵输入,每个点也有一个权值,当它们之间的那条边被选取时,需要加上两个点的权值。求这个网络的最小生成树。
直接套用prim算法的模板 其中用到一个节约内存的优化 将lowdistance 和visit 两个数组
结合起来 如果访问过lowdistance改成-1即可
另外该题中边的权值应为边本身的权值加上两端点的权值。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define maxx 9999999int map[1010][1010];int price[1010];int lowdis[1010];int n,ans;void prim(){ int i,j,minn,loc; for(i=1; i<=n; i++) lowdis[i]=map[1][i]; lowdis[1]=-1; for(i=1; i<n; i++) { minn=maxx; for(j=1; j<=n; j++) if(lowdis[j]!=-1&&lowdis[j]<minn) minn=lowdis[j],loc=j; ans+=lowdis[loc]; lowdis[loc]=-1; for(j=1; j<=n; j++) if(lowdis[j]>map[loc][j]) lowdis[j]=map[loc][j]; } return;}int main(){ int t,i,j; scanf("%d",&t); while(t--) { ans=0; scanf("%d",&n); for(i=1; i<=n; i++) scanf("%d",&price[i]); for(i=1; i<=n; i++) for(j=1; j<=n; j++) { scanf("%d",&map[i][j]); if(i==j) map[i][j]=maxx; else map[i][j]+=price[i]+price[j]; } prim(); cout<<ans<<endl; } return 0;}
0 0
- ZOJ 1586 QS Network prim优化模板
- zoj 1586 QS Network (Prim~)
- zoj 1586 QS Network (Prim)
- ZOJ-1586QS Network(prim)
- ZOJ 1586 QS Network MST prim水题
- zoj QS 1586 Network (prim算法)
- ZOJ 1586 QS Network (经典MST~Prim)
- ZOJ 1586 QS Network(最小生成树 prim)
- zoj 1586 QS Network【最小生成树 kruskal && prim】
- ZOJ 1586 QS Network(最小生成树 Prim)
- ZOJ 1586 QS Network
- ZOJ 1586 QS Network
- zoj 1586 QS Network
- ZOJ 1586 QS Network
- ZOJ-1586-QS Network
- ZOJ:1586 QS Network
- zoj 1586 QS Network
- ZOJ-1586 QS Network
- ubuntu安装eclipse
- Android 手势密码分析
- uva1398
- contiki 源码分析之tunslip6(七)(exampes)
- SAX解析XML
- ZOJ 1586 QS Network prim优化模板
- C++ primer plus 第六版 课后答案 8.4
- 九度1048(判断三角形)
- MSP430F5529LP+CC3000学习过程(二)——与PC互传数据
- 平凡人中的小小的愿望
- c++编程思想(一)-------存取控制是编译器行为
- MFC 改变窗口类名
- C++中Format用法
- wordpress wp_nav_menu 连接增加 nofollow