POJ 2607 Fire Station
来源:互联网 发布:俯瞰风景 知乎 编辑:程序博客网 时间:2024/05/22 00:25
又是一道最短路的题,为了提高效率,我用的邻接链表+SPFA做的,速度很快,0ms过的。
首先,初始化完dist数组后,对每个消防站作为起点都求一次最短路,期间不再初始化dist数组,这样最后得到的dist数组就是每个居民到最近的消防站的距离。
然后枚举每个点,每次求一下最短路,用其中的最大值比较一下。 然后这个代码贴到zoj上是过不了的,因为那里的输入很恶心人。还有空行神马的。
/*ID: sdj22251PROG: subsetLANG: C++*/#include <iostream>#include <vector>#include <list>#include <map>#include <set>#include <deque>#include <queue>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <cctype>#include <map>#include <string>#include <cstring>#include <cmath>#include <ctime>#define LOCA#define MAXN 505#define INF 0x0fffffff#define eps 1e-7using namespace std;struct node{ int v, w; node *next;} edge[MAXN];int d[MAXN], dd[MAXN], n, m, fire[MAXN];int q[MAXN * 3];bool visited[MAXN];void spfa(int src, int *ecost){ int h, t, u, i; node *ptr; h = 0, t = 1; memset(visited, 0, sizeof(visited)); q[0] = src; ecost[src] = 0; visited[src] = true; while(h < t) { u = q[h++]; visited[u] = false; ptr = edge[u].next; while(ptr) { if(ecost[ptr -> v] > ecost[u] + ptr -> w) { ecost[ptr -> v] = ecost[u] + ptr -> w; if(!visited[ptr -> v]) { q[t++] = ptr -> v; visited[ptr -> v] = true; } } ptr = ptr -> next; } }}void insert(const int &x, const int &y, const int &w){ node *ptr = new node; ptr -> v = y; ptr -> w = w; ptr -> next = edge[x].next; edge[x].next = ptr;}int main(){#ifdef LOCAL freopen("d:/data.in","r",stdin); freopen("d:/data.out","w",stdout);#endif char s[140]; int i, u, v, w, j; while(scanf("%d%d", &m, &n) != EOF) { for(i = 0; i < m; i++) { scanf("%d", &fire[i]); } int mi = INF; int ans = 1; for(i = 0; i <= n; i++) { edge[i].next = NULL; } while(scanf("%d%d%d", &u, &v, &w) != EOF) { insert(u, v, w); insert(v, u, w); } for(i = 0; i <= n; i++) d[i] = INF; for(i = 0; i < m; i++) spfa(fire[i], d); for(i = 1; i <= n; i++) { int mx = 0; if(d[i] == 0) continue; for(j = 0; j <= n; j++) dd[j] = d[j]; spfa(i, dd); for(j = 1; j <= n; j++) mx = max(mx, dd[j]); if(mi > mx) { mi = mx; ans = i; } } printf("%d\n", ans); } return 0;}
- POJ 2607 Fire Station
- poj 2607 Fire Station
- poj 2607 Fire Station
- POJ 2607 Fire Station
- poj 2607 Fire Station
- poj 2607 Fire Station(floyd)
- POJ 2607 / ZOJ 1857 /NYOJ210 Fire Station
- POJ 2607 ZOJ 1857 Fire Station
- ZOJ 1857 && POJ 2607 Fire Station【SPFA】
- POJ 2607 Fire Station(floyd)
- ZOJ-1857(POJ-2607) Fire Station
- poj 2607 Fire Station (spfa)
- POJ 2607 Fire Station(Floyd)
- POJ 2607 Fire Station 消防站
- POJ 2607 / ZOJ 1857 Fire Station (临接表+spfa)
- zoj 1857 || poj 2607 Fire Station(纠结!!!)
- Fire Station
- Fire Station
- 《30天精通iPhone手机编程》-Day23-移动的方块
- R-Tree空间索引算法的研究历程和最新进展分析
- Linux 启动流程
- ERP系统介绍
- 几种任务调度的 Java 实现方法与比较
- POJ 2607 Fire Station
- Linux ln命令的注意事項
- jsp中四个主要内置对象
- HDOJ1084学习输入
- 多线程,同步,锁
- 方向转变
- less 命令最基本的用法
- wp_query函数在WordPresss中的运用
- ASP.NET下FCKeditor配置方法全解