POJ 2395 Out of Hay

http://poj.org/problem?id=2395

裸最小生成树 输出树中最大cost的边值

直接prim

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <queue>
 5 #include <algorithm>
 6 #define READ() freopen("in.txt", "r", stdin);
 7 #define MAXV 2007
 8 #define MAXE 20007
 9 #define INF 0x3f3f3f3f3f3f3f3f
10
11 using namespace std;
12 int N, M;
13 typedef long long ll;
14 typedef pair<ll, int> P;
15
16 struct Edge
17 {
18     int to, next;
19     ll cost;
20     Edge() {}
21     Edge(int to, ll cost, int next) : to(to), cost(cost), next(next) {}
22 }edge[MAXE];
23
24 int head[MAXV];
25 int num = 0;
26 void Add(int from, int to, ll cost)
27 {
28     edge[num] = Edge(to, cost, head[from]);
29     head[from] = num++;
30 }
31
32 int prim()
33 {
34     ll dist[MAXV];
35     ll rec[MAXV], r = 0;
36     bool use[MAXV];
37     priority_queue<P, vector<P>, greater<P> > que; // 从小到大排啊
38     fill(dist, dist+MAXV, INF);
39     fill(use, use+MAXV, false);
40     dist[1] = 0;
41     que.push(P(dist[1], 1));
42     while (!que.empty())
43     {
44         P p = que.top();
45         que.pop();
46         ll d = p.first;
47         int v = p.second;
48         if (!use[v]) rec[r++] = dist[v];
49         use[v] = true;
50         if (dist[v] < d) continue;
51         int t = head[v];
52         while (t != -1)
53         {
54             Edge e = edge[t];
55             if (!use[e.to] && dist[e.to] > e.cost)
56             {
57                 dist[e.to] = e.cost;
58                 que.push(P(dist[e.to], e.to));
59             }
60             t = e.next;
61         }
62     }
63     sort(rec, rec+r);
64     return rec[r-1];
65 }
66
67
68
69 int main()
70 {
71     READ()
72     scanf("%d%d", &N, &M);
73     memset(edge, -1, sizeof(edge));
74     memset(head, -1, sizeof(head));
75     for (int i = 0; i < M; i++)
76     {
77         int from, to;
78         ll cost;
79         scanf("%d%d", &from, &to);
80         scanf("%lld", &cost);
81         Add(from, to, cost);
82         Add(to, from, cost);
83     }
84     ll ans = prim();
85     cout << ans << endl;
86 }
时间: 2024-10-17 10:08:57

POJ 2395 Out of Hay的相关文章

POJ 2395 Out of Hay 草荒 (MST,Kruscal)

题意:Bessie要从牧场1到达各大牧场去,他从不关心他要走多远,他只关心他的水袋够不够水,他可以在任意牧场补给水,问他走完各大牧场,最多的一次需要多少带多少单位的水? 思路:其实就是要让所带的水尽量少,即所选的每条路都要尽量短,即最小瓶颈生成树.其实也就是最小生成树.再求生成树上权值最大的边即可. 1 //#include <bits/stdc++.h> 2 #include <cstdio> 3 #include <iostream> 4 #include <

Out of Hay POJ - 2395

The cows have run out of hay, a horrible event that must be remedied immediately. Bessie intends to visit the other farms to survey their hay situation. There are N (2 <= N <= 2,000) farms (numbered 1..N); Bessie starts at Farm 1. She'll traverse so

挑战程序设计竞赛 2.5 它们其实都是“图”

[Summarize] 1.注意对图是否连通的判定 2.灵活运用边权取负的技巧 AOJ 0189:Convenient Location /* 给出一张无向图,现在求一个点,使得这个点到所有点的距离和最小 输出这个点的编号和距离和 */ #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int N=10,INF=0x3f3f3f3f; int n,d[

《挑战程序设计竞赛》2.5 它们其实都是图

poj 2139 Six Degrees of Cowvin Baconfloyd的模板题. 建图的时候记得i==j的时候ma[i][j]=0;其他情况是inf 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int N,M; 6 const int maxn=305; 7 const int INF=0x3f3f3f3f; 8 int d[maxn][maxn],a[maxn]; 9

《挑战程序设计竞赛》课后练习题解集——2.5 它们其实都是“图”

2.5 它们其实都是“图” 最短路 AOJ 0189  求图上一点,到所有其他点的距离之和最小 Floyd算法 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int inf = 1e8; 5 int d[11][11]; 6 7 int main() { 8 int n; 9 while (cin >> n) { 10 if (n == 0) break; 11 12 for (int i = 0; i &l

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京

转载:poj题目分类(侵删)

转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K–0.50K:中短代码:0.51K–1.00K:中等代码量:1.01K–2.00K:长代码:2.01K以上. 短:1147.1163.1922.2211.2215.2229.2232.2234.2242.2245.2262.2301.2309.2313.2334.2346.2348

poj题库分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ题目(转)

http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (