BZOJ 2834: 回家的路 Dijkstra

按照横,竖为方向跑一个最短路即可,算是水题~ 

#include     
#define N 200005    
#define E 2000000 
#define setIO(s) freopen(s".in","r",stdin) 
using namespace std;      
int n,m,tot,edges,s,T;     
int hd[E],to[E],nex[E],val[E],d[E],done[E],id[E][2];            
void addedge(int u,int v,int c) 
{nex[++edges]=hd[u],hd[u]=edges,to[edges]=v,val[edges]=c;     
}
struct Point
{int x,y,id;   Point(int x=0,int y=0):x(x),y(y){}   
}t[N];     
struct Node
{int u,dis; Node(int u=0,int dis=0): u(u),dis(dis){} bool operator<(Node b) const {return b.disq;     
bool cmpx(Point a,Point b) 
{return a.x==b.x?a.y d[u] + val[i]) {d[v] = d[u] + val[i]; q.push(Node(v, d[v]));      }}}
}
int main() 
{  int i,j,k;  // setIO("input");  scanf("%d%d",&n,&m);         for(i=2;i<=m+1;++i) { scanf("%d%d",&t[i].x,&t[i].y);    id[i][0]=++tot;   id[i][1]=++tot;                   t[i].id=i;     }    scanf("%d%d",&t[1].x,&t[1].y); id[1][0]=++tot; id[1][1]=++tot;  t[1].id=1;m+=2;            scanf("%d%d",&t[m].x,&t[m].y); id[m][0]=++tot; id[m][1]=++tot;  t[m].id=m;            for(i=1;i<=m;++i) {addedge(id[i][0],id[i][1],1); addedge(id[i][1],id[i][0],1);   }sort(t+1,t+1+m,cmpx);  for(i=1;i<=m;i=j) {for(j=i;j<=m&&t[j].x==t[i].x;++j);    for(k=i+1;k

  


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部