POJ 2485 Highways 最小生成树
2016-07-25 15:14
344 查看
题目要求:求一个最小生成树的最大边的权值,直接Prim,这题从上午十一点开始TLE,一直到下午15:06分坐了出来,一直TLE->WA->TLE->PE,不过最后还是做出来了,TLE的原因主要是book标记数组必须用bool类型,~~~~~,中间还用了Kruskal的算法,也是TLE,不知道为什么,总之好无语~~~~~Prim的代码如下:
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #define inf 0x3f3f3f using namespace std; int a[550][550]; int dis[550]; bool book[550]; int main() { int t; cin >> t; int n; int i, j, k; while(t--){ memset(book,false,sizeof(book)); cin >> n; for(i = 1;i <= n;i++){ for(j = 1;j <= n;j++) cin >> a[i][j]; } for(i = 1;i <= n;i++){ dis[i] = a[1][i]; } book[1] = true; int cnt =1; int sum = 0; int min; while(cnt < n){ min = inf; for(i = 1;i <= n;i++){ if( !book[i] && dis[i] < min){ min = dis[i]; j = i; } } cnt++; book[j] = true; if(sum < min)//sum表示最大边的权值,只要一个边加入到最小生成树中去,就与sum比较,比sum大的话,更新sum sum = min; for(k = 1;k <= n;k++){ if( !book[k] && dis[k] > a[j][k]){ dis[k] = a[j][k]; } } } cout << sum << endl; } return 0; }
相关文章推荐
- 图像拼接了解
- Android 使用Vitamio打造自己的万能播放器(6)――在线播放(播放列表)
- lightoj1101 ASecret Mission
- grub2的mbr分析
- Java提高篇——equals()与hashCode()方法详解
- import()函数
- c# 根据读取的配置信息删除某个目录及下所有文件
- OCX和DLL的区别
- Java:详解Java中super的几种用法并与this的区别
- 即时通讯快速建设的方法
- gearman map_reduce
- Codeforces Round #322 (Div. 2)
- LVM逻辑卷管理
- onload事件--addLoadEvent函数--我的改进
- 给电脑端网页添加手机适配
- android SQLite疑点分析
- 2016003 VS2008MFC扩展动态库与调用示例
- 8086汇编语言自学经验分享 使用offset命令获取标号的IP地址
- HTML5本地存储之Database Storage篇
- Git 版本回退与前进(03)