poj1797Heavy Transportation(dijkstra)
来源:互联网 发布:浙师大行知学院新生 编辑:程序博客网 时间:2024/05/19 00:14
这题和昨天做的poj2253 Frogger(用单源最短路dijkstra的思路求解) 几乎一模一样,只是点的数量范围从200变成了1000,不优化O(n^3)肯定超时,所以要用优先队列优化到O(n^2logn)。
需要注意的一点就是两点不可达则令w=0。
如果起点和终点重合,那么输出一个不小于1000000的数即可。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int inf=0x3f3f3f3f;const int maxn=1000;priority_queue<int>pq[maxn+5];int n;int d[maxn+5];int w[maxn+5][maxn+5];bool vis[maxn+5];int find(){ int maxi=-1; int maxd=0; for(int i=1;i<=n;i++)if(vis[i]==false){ d[i]=max(d[i],pq[i].top()); if(d[i]>maxd){ maxd=d[i]; maxi=i; } } return maxi;}void update(int cur){ for(int i=1;i<=n;i++)if(vis[i]==false){ pq[i].push(min(d[cur],w[cur][i])); }}void initpq(){ for(int i=1;i<=n;i++){ while(!pq[i].empty())pq[i].pop(); for(int j=1;j<=n;j++){ pq[i].push(min(d[j],w[i][j])); } }}void dj(int cur){ memset(vis,false,sizeof(vis)); memset(d,0,sizeof(d)),d[cur]=inf; initpq(); while((cur=find())!=-1){ vis[cur]=true; update(cur); }}int main(){ int T; scanf("%d",&T); for(int t=1;t<=T;t++){ int m; scanf("%d%d",&n,&m); memset(w,0,sizeof(w)); while(m--){ int x,y,z; scanf("%d%d%d",&x,&y,&z); w[x][y]=w[y][x]=z; } dj(1); printf("Scenario #%d:\n",t); printf("%d\n\n",d[n]); }}
0 0
- poj1797Heavy Transportation(dijkstra)
- poj1797Heavy Transportation——Dijkstra变形
- POJ1797Heavy Transportation 最短路变形
- 最大生成树POJ1797Heavy Transportation解题报告
- POJ1797 Heavy Transportation(Dijkstra改写)
- POJ 1797 Heavy Transportation(dijkstra)
- POJ 1797 Heavy Transportation(Dijkstra)
- POJ 1797 Heavy Transportation(dijkstra变形)
- poj Heavy Transportation(dijkstra,spfa)
- POJ 1797 Heavy Transportation(Dijkstra算法)
- poj2253Frogger(最短路变形)及poj1797Heavy Transportation(最大生成树)
- POJ1797 Heavy Transportation 【Dijkstra】
- Heavy Transportation Dijkstra
- poj2253 Frogger +poj1797Heavy Transpotaion(最短路dijkstra变式)
- POJ 1797Heavy Transportation(dijkstra算法+优先队列优化)
- POJ 1797-Heavy Transportation(Dijkstra + 二分答案)
- POJ1797-Heavy Transportation(Dijkstra 变式& 最大生成树)
- Heavy Transportation dijkstra(附vector模拟邻接表)
- /www/wdlinux/mysql/bin/mysqld: Table 'mysql.plugin' doesn't exist
- jQuery事件之鼠标事件
- Map集合 16.07.31 Java基础
- 网易互联网笔试题(多年)
- Android ramdisk,boot,system.img 解包和打包
- poj1797Heavy Transportation(dijkstra)
- ubuntu 14.04 搭建GPU深度学习 tensorflow 平台
- poj3621 Sightseeing Cows 【最大比例环 01分数规划】
- jq设置头信息
- Android开发人员不得不收集的代码(不断更新)
- Linux学习总结
- test
- BZOJ 1007 [HNOI2008]水平可见直线
- 浅谈单片机应用程序架