标签:poj1797
| Time Limit: 3000MS | Memory Limit: 30000K | |
| Total Submissions: 21037 | Accepted: 5569 |
Description
Input
Output
Sample Input
1 3 3 1 2 3 1 3 4 2 3 5
Sample Output
Scenario #1: 4
Source
#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;
}
#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】
标签:poj1797
原文地址:http://blog.csdn.net/chang_mu/article/details/40143391