POJ 1797 Heavy Transportation——spfa

网友投稿 467 2022-11-28

POJ 1797 Heavy Transportation——spfa

POJ 1797 Heavy Transportation——spfa

题意:给定一个无向图, 求1到n的所有路径中最大的承载量,承载量 = 一条路径中所有边权值的最小值

思路:spfa变形, 很巧妙, 初始化时把dis数组全部初始化为0, 然后把dis[s]设置为INF, 松弛操作时比较dis[v]与min(dis[u], val)的大小

#include #include #include #include #include #include #include using namespace std;typedef pair P;const int INF = 0x3f3f3f3f;const int maxn = 1010;bool vis[maxn];int T, n, m, dis[maxn];vector

G[maxn];void spfa(int s) { for (int i = 1; i <= n; i++) dis[i] = 0, vis[i] = false; dis[s] = INF, vis[s] = true; queue q; q.push(s); while (!q.empty()) { int u = q.front(); q.pop(); vis[u] = false; for (int i = 0; i < G[u].size(); i++) { int v = G[u][i].first, val = G[u][i].second; int temp = min(dis[u], val); if (dis[v] < temp) { dis[v] = temp; if (!vis[v]) vis[v] = true, q.push(v); } } }}int main() { scanf("%d", &T); for (int kase = 1; kase <= T; kase++) { scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) G[i].clear(); while (m--) { int u, v, val; scanf("%d %d %d", &u, &v, &val); G[u].push_back(make_pair(v, val)); G[v].push_back(make_pair(u, val)); } spfa(1); printf("Scenario #%d:\n%d\n\n", kase, dis[n]); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:POJ 1015 Jury Compromise——01背包变形
下一篇:UVA 10817 Headmaster's Headache——dp
相关文章

 发表评论

暂时没有评论,来抢沙发吧~