USACO oct. 09 Watering Hole
来源:互联网 发布:painter中文版mac 编辑:程序博客网 时间:2024/04/30 22:32
USACO oct. 09 Watering Hole
2017年7月15日
Prim算法
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define maxx 300 + 100int N;struct Vertex{ int id, price;}V[maxx];int E[maxx][maxx];int minpay = 0;bool cmp(Vertex a, Vertex b){return a.price < b.price;}inline int FindMinPrice(int a, int b){ return min(V[b].price, E[V[a].id][V[b].id]);}void Putin(){ cin >> N; for(int i = 1; i <= N; i++){ cin >> V[i].price; V[i].id = i; } for(int i = 1; i <= N; i++) for(int k = 1; k <= N; k++) cin >> E[i][k]; sort(V + 1, V + 1 + N, cmp);}int Dis[maxx];bool Jud[maxx];void MST_PRIM(){ memset(Dis, 10, sizeof(Dis)); memset(Jud, false, sizeof(Jud)); Dis[V[1].id] = 0; Jud[V[1].id] = true; for(int i = 2; i <= N; i++) Dis[V[i].id] = FindMinPrice(1, i); for(int i = 1; i <= N - 1; i++) { int minn = 5201314; int sgn = -1; for(int k = 1; k <= N; k++) if(!Jud[V[k].id] && minn > Dis[V[k].id]){ minn = Dis[V[k].id]; sgn = k; } Jud[V[sgn].id] = true; minpay += minn; for(int k = 1; k <= N; k++) if(!Jud[V[k].id]) Dis[V[k].id] = min(Dis[V[k].id], min(E[V[k].id][V[sgn].id], V[k].price)); }}int main(){ Putin(); MST_PRIM(); cout << minpay + V[1].price << endl; return 0;}
阅读全文
0 0
- USACO oct. 09 Watering Hole
- [Usaco2008 Oct]Watering Hole 挖水井
- Watering Hole
- USACO - Oct08 Gold Watering Hole 挖井 Kruskal演算法+点权转边权
- SOJ 3366 watering hole
- [USACO08OCT]Watering Hole
- [Usaco08Oct] Watering Hole
- [USACO08OCT]Watering Hole
- Watering Hole(题解)
- 【USACO08OCT】浇水洞Watering Hole
- 图论之Watering Hole
- 洛谷 P1550 [USACO08OCT]打井Watering Hole
- usaco 2008 oct water
- usaco 2008 oct pwalk
- 【Usaco 2008 Oct】灌水
- 【洛谷 1339】【USACO 09 OCT】热浪 Heat Wave
- 【学术篇】洛谷1550——打井Watering Hole
- [洛谷P1550] [USACO08OCT]打井Watering Hole [最小生成树]
- Fragment入门学习总结
- 重载(Overload)
- 浙工大姗姗杯round1 C
- 内核移植中的RTC问题
- Django 基础开发
- USACO oct. 09 Watering Hole
- Java基本语法_01
- RXJAVA方法调用浅析
- GCC和G++区别
- 《编程之美》学而思
- 序列化和反序列化
- zookeeper介绍及集群安装(一)
- Unit 6
- 欢迎使用CSDN-markdown编辑器