BZOJ1001 [BeiJing2006]狼抓兔子(平面图最小割转最短路)
2016-05-05 19:26
489 查看
。。和HDU3870类似。。注意n=1和m=1的情况。
#include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; #define INF (1<<30) #define MAXN 2800000 struct Edge{ int v,w,next; }edge[MAXN<<2]; int vs,vt,NV,NE,head[MAXN]; void addEdge(int u,int v,int w){ edge[NE].v=v; edge[NE].w=w; edge[NE].next=head[u]; head[u]=NE++; } struct Node{ int u,d; Node(int _u=0,int _d=0):u(_u),d(_d){} bool operator<(const Node &nd)const{ return nd.d<d; } }; int d[MAXN]; bool vis[MAXN]; int dijkstra(){ for(int i=0; i<NV; ++i){ d[i]=INF; vis[i]=0; } d[vs]=0; priority_queue<Node> que; que.push(Node(vs,0)); while(!que.empty()){ Node nd=que.top(); que.pop(); if(nd.u==vt) return nd.d; if(vis[nd.u]) continue; vis[nd.u]=1; for(int i=head[nd.u]; i!=-1; i=edge[i].next){ int v=edge[i].v; if(vis[v]) continue; if(d[v]>d[nd.u]+edge[i].w){ d[v]=d[nd.u]+edge[i].w; que.push(Node(v,d[v])); } } } return INF; } int main(){ int n,m,a; scanf("%d%d",&n,&m); if(n==1 && m==1){ puts("0"); return 0; } vs=(n-1)*(m-1)*2; vt=vs+1; NV=vt+1; NE=0; memset(head,-1,sizeof(head)); int mm=INF; for(int i=0; i<n; ++i){ for(int j=0; j<m-1; ++j){ scanf("%d",&a); mm=min(mm,a); if(i==0) addEdge(i*(m-1)+j,vt,a); if(i==n-1) addEdge(vs,(i-1)*(m-1)+j+(n-1)*(m-1),a); if(i!=0 && i!=n-1){ addEdge(i*(m-1)+j,(i-1)*(m-1)+j+(n-1)*(m-1),a); addEdge((i-1)*(m-1)+j+(n-1)*(m-1),i*(m-1)+j,a); } } } for(int i=0; i<n-1; ++i){ for(int j=0; j<m; ++j){ scanf("%d",&a); mm=min(mm,a); if(j==0) addEdge(vs,i*(m-1)+j+(n-1)*(m-1),a); if(j==m-1) addEdge(i*(m-1)+j-1,vt,a); if(j!=0 && j!=m-1){ addEdge(i*(m-1)+j+(n-1)*(m-1),i*(m-1)+j-1,a); addEdge(i*(m-1)+j-1,i*(m-1)+j+(n-1)*(m-1),a); } } } for(int i=0; i<n-1; ++i){ for(int j=0; j<m-1; ++j){ scanf("%d",&a); mm=min(mm,a); addEdge(i*(m-1)+j,i*(m-1)+j+(n-1)*(m-1),a); addEdge(i*(m-1)+j+(n-1)*(m-1),i*(m-1)+j,a); } } if(n==1 || m==1) printf("%d",mm); else printf("%d",dijkstra()); return 0; }
相关文章推荐
- 不论学什么专业,都该了解的名词
- Android中线程的正确使用
- Big Event in HDU
- segmented control的使用
- 二分查找算法
- AngularJS所有版本下载地址
- AngularJS所有版本下载地址
- ubuntu install svn server record
- -[UICachedDeviceRGBColor CGImage]: unrecognized selector sent to instance 0x130972b90
- AngularJS所有版本下载地址
- MySQL修改root密码的多种方法
- 使用 python urllib2 抓取网页时出现乱码的解决方案
- iOS 开发CocoaPods的使用
- HDOJ(HDU) 2161 Primes(素数打表)
- HDOJ(HDU) 2161 Primes(素数打表)
- 根据服务端推送过来的数据规则,跳转到对应的控制器(runtime)
- jenkins,Tomcat重启脚本,设置jvm参数之后遇到了一个坑。
- 一个展现java多线程原理的例子
- iOS使用runtime设置字体格式
- 推送时,播放震动声音不停止的代码