博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dijkstra(变形) POJ 1797 Heavy Transportation
阅读量:6832 次
发布时间:2019-06-26

本文共 1558 字,大约阅读时间需要 5 分钟。

 

题意:求1到n的最大载重量

分析:那么就是最大路上的最小的边权值,改变优先规则.

 

#include 
#include
#include
#include
using namespace std;typedef long long ll;const int N = 1e3 + 10;const int E = 1e5 + 10;const int INF = 0x3f3f3f3f;struct Edge { int v, w, nex; Edge() {} Edge(int v, int w, int nex) : v (v), w (w), nex (nex) {} bool operator < (const Edge &r) const { return w < r.w; }}edge[E];int head[N];int d[N];bool vis[N];int n, m, e;void init(void) { memset (head, -1, sizeof (head)); e = 0;}void add_edge(int u, int v, int w) { edge[e] = Edge (v, w, head[u]); head[u] = e++;}void Dijkstra(int s) { memset (d, 0, sizeof (d)); memset (vis, false, sizeof (vis)); d[s] = INF; priority_queue
que; que.push (Edge (s, 0, 0)); while (!que.empty ()) { int u = que.top ().v; que.pop (); if (vis[u]) continue; vis[u] = true; for (int i=head[u]; ~i; i=edge[i].nex) { int v = edge[i].v, w = edge[i].w; if (!vis[v] && d[v] < min (d[u], w)) { d[v] = min (d[u], w); que.push (Edge (v, d[v], 0)); } } }}int main(void) { int T, cas = 0; scanf ("%d", &T); while (T--) { init (); scanf ("%d%d", &n, &m); int mx = 0; for (int u, v, w, i=1; i<=m; ++i) { scanf ("%d%d%d", &u, &v, &w); if (n == 1 && u == 1 && v == 1) mx = max (mx, w); add_edge (u, v, w); add_edge (v, u, w); } printf ("Scenario #%d:\n", ++cas); if (n == 1) { printf ("%d\n", mx); continue; } Dijkstra (1); printf ("%d\n\n", d[n]); } return 0;}

  

转载于:https://www.cnblogs.com/Running-Time/p/5001212.html

你可能感兴趣的文章
[LeetCode] 526. Beautiful Arrangement
查看>>
获取本机IP,用户代理
查看>>
apple watch 与 iphone 之间的通信方式
查看>>
Ubantu 查看系统资源占用
查看>>
Oracle EBS在编码方式为AL32UTF8时的注意事项
查看>>
linux那些事
查看>>
通信服务器的架构问题
查看>>
所见即所得的游戏界面开发
查看>>
python 学习笔记 五
查看>>
Qt 乱码
查看>>
SpringMVC由浅入深day01_7入门程序小结
查看>>
three.js
查看>>
一个简单的统计图像主颜色的算法(C#源代码)
查看>>
java开发中的重中之重-------mysql(基础篇)
查看>>
While 나가는 법
查看>>
c语言操作符的优先级
查看>>
Codeforces Round #420 (Div. 2) A-E
查看>>
9.4-9.19 h5日记总结
查看>>
mysql支持的存储引擎
查看>>
input checkbox复选框取值
查看>>