POJ1797 Heavy Transportation 【Dijkstra】
| Time Limit: 3000MS | Memory Limit: 30000K | |
| Total Submissions: 21037 | Accepted: 5569 |
Description
Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand business. But he needs a clever man who tells him whether there really is a way from the place his customer has build his giant steel crane to the place where it is needed
on which all streets can carry the weight.
Fortunately he already has a plan of the city with all streets and bridges and all the allowed weights.Unfortunately he has no idea how to find the the maximum weight capacity in order to tell his customer how heavy the crane may become. But you surely know.
Problem
You are given the plan of the city, described by the streets (with weight limits) between the crossings, which are numbered from 1 to n. Your task is to find the maximum weight that can be transported from crossing 1 (Hugo's place) to crossing n (the customer's
place). You may assume that there is at least one path. All streets can be travelled in both directions.
Input
of the street and the maximum allowed weight, which is positive and not larger than 1000000. There will be at most one street between each pair of crossings.
Output
the scenario with a blank line.
Sample Input
1
3 3
1 2 3
1 3 4
2 3 5
Sample Output
Scenario #1:
4
Source
题意:求点1到n的最小割。
先尝试了下DFS,结果TLE。
#include <stdio.h>
#include <string.h> #define maxn 1010
#define maxm maxn * maxn
#define inf 0x3f3f3f3f int head[maxn], n, m, id, ans, cas = 1;
struct Node {
int v, c, next;
} E[maxm];
bool vis[maxn]; void addEdge(int u, int v, int c) {
E[id].v = v; E[id].c = c;
E[id].next = head[u]; head[u] = id++; E[id].v = u; E[id].c = c;
E[id].next = head[v]; head[v] = id++;
} void getMap() {
int u, v, c; id = 0;
scanf("%d%d", &n, &m);
memset(head, -1, sizeof(int) * (n + 1));
while(m--) {
scanf("%d%d%d", &u, &v, &c);
addEdge(u, v, c);
}
} void DFS(int k, int dis) {
if(k == n) {
if(dis > ans) ans = dis;
return;
}
for(int i = head[k]; i != -1; i = E[i].next) {
if(!vis[E[i].v]) {
int pre = dis;
vis[E[i].v] = 1;
if(E[i].c < dis) dis = E[i].c;
DFS(E[i].v, dis);
dis = pre; vis[E[i].v] = 0;
}
}
} void solve() {
ans = 0;
memset(vis, 0, sizeof(bool) * (n + 1));
vis[1] = 1; DFS(1, inf);
printf("Scenario #%d:\n%d\n\n", cas++, ans);
} int main() {
// freopen("stdin.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--) {
getMap();
solve();
}
return 0;
}
然后尝试了下Dijkstra,过了..dis数组存储当前点到源点的最小割。
#include <stdio.h>
#include <string.h> #define maxn 1010
#define maxm maxn * maxn
#define inf 0x3f3f3f3f int head[maxn], n, m, id, ans, cas = 1;
struct Node {
int v, c, next;
} E[maxm];
int dis[maxn];
bool vis[maxn]; int max(int a, int b) {
return a > b ? a : b;
} int min(int a, int b) {
return a < b ? a : b;
} void addEdge(int u, int v, int c) {
E[id].v = v; E[id].c = c;
E[id].next = head[u]; head[u] = id++; E[id].v = u; E[id].c = c;
E[id].next = head[v]; head[v] = id++;
} void getMap() {
int u, v, c; id = 0;
scanf("%d%d", &n, &m);
memset(head, -1, sizeof(int) * (n + 1));
while(m--) {
scanf("%d%d%d", &u, &v, &c);
addEdge(u, v, c);
}
} int getNext() {
int pos = -1, val = 0;
for(int i = 1; i <= n; ++i)
if(dis[i] > val && !vis[i]) {
val = dis[i]; pos = i;
}
return pos;
} void Dijkstra(int start, int end) {
memset(dis, 0, sizeof(int) * (n + 1));
dis[start] = inf;
int i, u = start, v;
while(u != -1) {
vis[u] = 1;
if(u == end) return;
for(i = head[u]; i != -1; i = E[i].next) {
if(!vis[v = E[i].v]) dis[v] = max(dis[v], min(E[i].c, dis[u]));
}
u = getNext();
}
} void solve() {
memset(vis, 0, sizeof(bool) * (n + 1));
Dijkstra(1, n);
printf("Scenario #%d:\n%d\n\n", cas++, dis[n]);
} int main() {
// freopen("stdin.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--) {
getMap();
solve();
}
return 0;
}
POJ1797 Heavy Transportation 【Dijkstra】的更多相关文章
- POJ--1797 Heavy Transportation (最短路)
题目电波: POJ--1797 Heavy Transportation n点m条边, 求1到n最短边最大的路径的最短边长度 改进dijikstra,dist[i]数组保存源点到i点的最短边最大的路径 ...
- POJ 1797 ——Heavy Transportation——————【最短路、Dijkstra、最短边最大化】
Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64 ...
- (Dijkstra) POJ1797 Heavy Transportation
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 53170 Accepted: ...
- POJ 1797 Heavy Transportation (Dijkstra变形)
F - Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- 【Dijkstra】
[摘自]:华山大师兄,推荐他的过程动画~ myth_HG 定义 Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩 ...
- POJ 1797 Heavy Transportation (dijkstra 最小边最大)
Heavy Transportation 题目链接: http://acm.hust.edu.cn/vjudge/contest/66569#problem/A Description Backgro ...
- POJ1797 Heavy Transportation —— 最短路变形
题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- POJ1797 Heavy Transportation (堆优化的Dijkstra变形)
Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...
- POJ 1797 Heavy Transportation 【最大生成树的最小边/最小瓶颈树】
Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...
随机推荐
- c++ 学习备忘
char* 到 LPCTSTR 转换 char *m_str = "test!"; MessageBoxW(CString(m_str)); CString to LPCTSTR ...
- BZOJ 1037: [ZJOI2008]生日聚会Party( dp )
dp(i, j, a, b)表示选了i个男生, j个女生, 后缀中男生比女生多a(最多), 女生比男生多b(最多). dp(i+1, j, a+1, max(0, b-1)) += dp(i, j, ...
- 用C++写一个简单的发布者
节点是一个可执行程序,它连接到了ROS的网络系统中.我们将会创建一个发布者,也就是说话者节点,它将会持续的广播一个信息. 改变目录到之前所建立的那个包下: cd ~/catkin_ws/src/beg ...
- springmvc中关于静态资源的放行
参考:http://blog.csdn.net/fujiakai/article/details/52504525 方法1. 修改web.xml文件,增加对静态资源的url映射,要加在org.spri ...
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s)
In Build Settings are: Architectures: Starndard (armv7, armv7s) Base SDK: Latest iOS (iOS 6.0) Build ...
- querySelector $() getElementBy区别
参考 http://stackoverflow.com/questions/14377590/queryselector-and-queryselectorall-vs-getelementsbycl ...
- 生成输出url
继续使用前面的例子11-3URLTestDemo,修改Global.asax中的RegisterRoutes方法如下: public static void RegisterRoutes(RouteC ...
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good
上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...
- 在python中编写socket服务端模块(二):使用poll或epoll
在linux上编写socket服务端程序一般可以用select.poll.epoll三种方式,本文主要介绍使用poll和epoll编写socket服务端模块. 使用poll方式的服务器端程序代码: i ...
- 贪吃蛇AI
贪吃蛇AI 作者:CodeNoob 转载请标明作者和出处 序言 前几天在网上看到一张让人涨姿势的图片,这张图片我很早以前看过,当时就觉得肯定是程序实现的,只是当时还比较渣,不会算法.这次学了java也 ...