POJ 2395 - Out of Hay(最小生成树)
2015-03-02 17:37
411 查看
题目:
http://poj.org/problem?id=2395
思路:
最小生成数,WA了几遍之后去看discuss发现有重边, prim和kruskal两种算法都写了,当模板咯=.= kuskal 算法会快些.
CODE:
kruskal (63ms)
prim (141ms)
http://poj.org/problem?id=2395
思路:
最小生成数,WA了几遍之后去看discuss发现有重边, prim和kruskal两种算法都写了,当模板咯=.= kuskal 算法会快些.
CODE:
kruskal (63ms)
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int INF = 1e9; const int maxn = 2000*2000; struct edge{ int u, v, cost; }eg[maxn]; int V, E; int par[2005]; bool cmp(edge a, edge b) { return a.cost < b.cost; } void init(int n) { for(int i = 0; i < n; ++i) par[i] = i; } int find(int x) { if(par[x] == x) return x; else { return par[x] = find(par[x]); } } void unite(int x, int y) { x = find(x); y = find(y); if(y < x) par[x] = y; else if(y > x) par[y] = x; } bool same(int x, int y) { return find(x) == find(y); } int kruskal() { sort(eg, eg + E, cmp); init(V); int ans = 0; for(int i = 0; i < E; ++i) { edge e = eg[i]; if(!same(e.u, e.v)) { unite(e.u, e.v); ans = max(ans, e.cost); } } return ans; } int main() { //freopen("in", "r", stdin); while(~scanf("%d %d", &V, &E)) { for(int i = 0; i < E; ++i) { scanf("%d %d %d", &eg[i].u, &eg[i].v, &eg[i].cost); } printf("%d\n", kruskal()); } return 0; }
prim (141ms)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 2005; const int INF = 1e9; int cost[maxn][maxn], d[maxn], n; bool used[maxn]; int prim() { fill(d, d + n + 1, INF); memset(used, 0, sizeof(used)); d[1] = 0; int ans = -1; while(1) { int v = -1; for(int i = 1; i <= n; ++i) { if(!used[i] && (v == -1 || d[i] < d[v])) v = i; } if(v == -1) break; used[v] = 1; ans = max(ans, d[v]); for(int i = 1; i <= n; ++i) { d[i] = min(d[i], cost[v][i]); } } return ans; } int main() { //freopen("in", "r", stdin); int m; while(~scanf("%d %d", &n, &m)) { for(int i = 0; i <= n; ++i) { for(int j = 0; j <= n; ++j) cost[i][j] = INF; } int a, b, c; while(m--) { scanf("%d %d %d", &a, &b, &c); cost[a][b] = min(c, cost[a][b]); cost[b][a] = min(c, cost[b][a]); } int ans = prim(); printf("%d\n", ans); } return 0; }
相关文章推荐
- POJ 2395 Out of Hay【最小生成树】
- POJ_2395_Out of Hay【基础最小生成树】
- poj 2395 Out of Hay(最小生成树,水)
- 【最小生成树】POJ 2395 Out of Hay
- POJ 2395 Out of Hay (Kruskal求最小生成树最大边)
- poj 2395 Out of Hay (最小生成树的最大边)
- POJ - 2395 Out of Hay (图论/最小生成树)
- Out of Hay (poj 2395 最小生成树)
- POJ 2395 Out of Hay 最小生成树 Kruskal
- POJ 2395 Out of Hay(最小生成树+克鲁斯卡尔)
- POJ 2395 Out of Hay 最小生成树
- Poj 2395 Out of Hay( 最小生成树 )
- poj2395--Out of Hay(最小生成树)
- poj 2395 Out of Hay、2485 Highways(求最小生成树的最长边)
- poj 2395 Out of Hay(最小生成树)
- POJ - 2395 Out of Hay (最小生成树, Kruskal)
- POJ - 2395 Out of Hay(最小生成树)
- POJ 2395 Out of Hay(最小生成树)
- POJ 2395 Out of Hay(最小瓶颈生成树)
- POJ 2395 Out of Hay(最小生成树--prime 水)