Wannafly交流赛1 迷宫2 多源最短路
2018-03-11 09:15
369 查看
https://www.nowcoder.com/acm/contest/69#question
解题思路:
n和m只有500,一开始以为是n^2的dp
后来在纸上画了一下,能把两个端点隔开的障碍连起来就是一条由左下边界走到右上边界的路径。 要使路径花费最小。
这样就是一个很简单的多源最短路了。
想起自己还有一个博客,咳咳,努力刷题。。。。
acm 菜是原罪啊!
解题思路:
n和m只有500,一开始以为是n^2的dp
后来在纸上画了一下,能把两个端点隔开的障碍连起来就是一条由左下边界走到右上边界的路径。 要使路径花费最小。
这样就是一个很简单的多源最短路了。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<queue> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; typedef long long LL; int dirx[4]={1,-1,0,0}; int diry[4]={0,0,1,-1}; class Node{ public: int i,j; long long w; bool operator < (const Node &b) const{ return w>b.w; } Node(int i,int j,LL w):i(i),j(j),w(w){} }; int n,m; LL maps[505][505]; LL dis[505][505]; void dij(){ priority_queue<Node> PQ; for(int i=2;i<=n;i++){ if(maps[i][1]!=0) PQ.push(Node(i,1,max(0ll,maps[i][1]))); } for(int i=1;i<m;i++){ if(maps [i]!=0) PQ.push(Node(n,i, max(0ll,maps [i]))); } while(!PQ.empty()){ Node now=PQ.top(); PQ.pop(); //cout<<now.i<<","<<now.j<<":"<<now.w<<endl; if(now.i==1 || now.j==m){ printf("%lld\n",now.w); return; } for(int i=0;i<4;i++){ Node next(now.i+dirx[i],now.j+diry[i],0); if(next.i<1 || next.j<1 || next.i>n || next.j>m) continue; if(next.i==1 && next.j==1) continue; if(next.i==n && next.j==m) continue; //cout<<"maps:"<<maps[next.i][next.j]<<endl; if(maps[next.i][next.j]!=0){ next.w=now.w+max(0ll,maps[next.i][next.j]); if(dis[next.i][next.j]>next.w){ PQ.push(next); dis[next.i][next.j]=next.w; } } } } cout<<-1<<endl; } int main(){ int Q; scanf("%d %d %d",&Q,&n,&m); while(Q--){ memset(dis,0x3f,sizeof dis); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%lld",&maps[i][j]); } } dij(); } }
想起自己还有一个博客,咳咳,努力刷题。。。。
acm 菜是原罪啊!
相关文章推荐
- Wannafly交流赛1-D-迷宫2(最短路)
- Wannafly交流赛1: D. 迷宫2(最短路)
- 牛客交流赛1 D题 迷宫2 【思维 + 最短路 + 平面最小割转最短路思想】
- Wannafly交流赛1-D:迷宫2(优先队列+BFS)
- wannafly交流赛1D(对偶图->最短路)
- 牛客网 Wannafly交流赛1 D 迷宫2 (思维+bfs)
- 【Wannafly交流赛1】 A B【思维】 D【平面图最小割转最短路】
- Wannafly交流赛1 D-迷宫2
- Wannafly交流赛1 D迷宫2
- codevs 1077 多源最短路x
- 迷宫--矩阵中任意两点之间最短路-4个方向(dfs)
- UVALive 6378 Friend Chains (多源最短路 spfa)
- 多源最短路Floyd 算法————matlab实现
- Wannafly 挑战赛第二场 B Travel【最短路 建图】
- Aizu 0189 (多源 最短路Floyd )
- UVa:10803 Thunder Mountain(floyd求多源最短路)
- 牛客Wannafly挑战赛10 A.小H和迷宫
- 迷宫最短路(bfs)
- hdoj 5545 The Battle of Guandu 【差分约束系统 求解多源最短路】
- POJ 3268 Silver Cow Party(多源最短路的转化)