752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in
输出文件:bjrabbit.out
简单对比
时间限制:1 s 内存限制:162 MB
Description Source: Beijing2006 [BJOI2006]
八中OJ上本题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001
现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:
Input
Output
Sample Input
5 6 4
4 3 1
7 5 3
5 6 7 8
8 7 6 5
5 5 5
6 6 6
Sample Output
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cmath>
- #include<algorithm>
- #include<queue>
- #define inf 0x7fffffff
- using namespace std;
- const int maxn=+;
- const int M = maxn*+;
- int n,m,nn,mm;
- int from,to;
- struct Edge
- {
- int v,flow;
- int next;
- }edge[M];
- int head[maxn],edgenum;
- void add(int u,int v,int flow)
- {
- edge[edgenum].v=v ;edge[edgenum].flow=flow ;
- edge[edgenum].next=head[u] ;head[u]=edgenum++ ;
- edge[edgenum].v=u ;edge[edgenum].flow=flow ;
- edge[edgenum].next=head[v] ;head[v]=edgenum++ ;
- }
- struct node
- {
- int v,w;
- friend bool operator < (node a,node b)
- {
- return a.w > b.w;
- }
- }cur,tail;
- int d[maxn],vis[maxn];
- void Dijkstra(int from,int to)
- {
- for (int i= ;i<maxn ;i++) d[i]=inf;
- memset(vis,,sizeof(vis));
- d[from]=;
- priority_queue<node> Q;
- cur.v=from ;cur.w= ;
- Q.push(cur);
- while (!Q.empty())
- {
- cur=Q.top() ;Q.pop() ;
- int x=cur.v;
- if (vis[x]) continue;
- vis[x]=;
- for (int i=head[x] ;i!=- ;i=edge[i].next)
- {
- if (d[edge[i].v ]>d[x]+edge[i].flow)
- {
- d[edge[i].v ]=d[x]+edge[i].flow;
- tail.v=edge[i].v;
- tail.w=d[edge[i].v ];
- Q.push(tail);
- }
- }
- }
- printf("%d\n",d[to]);
- }
- int main()
- {
- while (scanf("%d%d",&n,&m)!=EOF)
- {
- memset(head,-,sizeof(head));
- edgenum=;
- from=;
- to=*(n-)*(m-)+;
- int x,y,cost;
- for (int i= ;i<=n ;i++)
- {
- for (int j= ;j<m ;j++)
- {
- scanf("%d",&cost);
- x= i== ? from : (*(i-)-)*(m-)+j;
- y= i==n ? to : (*(i-))*(m-)+j;
- add(x,y,cost);
- }
- }
- for (int i= ;i<n ;i++)
- {
- for (int j= ;j<=m ;j++)
- {
- scanf("%d",&cost);
- x= j== ? to : (*(i-))*(m-)+j-;
- y= j==m ? from : (*(i-))*(m-)+j-+m;
- add(x,y,cost);
- }
- }
- for (int i= ;i<n ;i++)
- {
- for (int j= ;j<m ;j++)
- {
- scanf("%d",&cost);
- x=(*(i-))*(m-)+j;
- y=(*(i-)+)*(m-)+j;
- add(x,y,cost);
- }
- }
- Dijkstra(from,to);
- }
- return ;
- }
下面是自己写的蜜汁WA、、
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<queue>
- #include<algorithm>
- using namespace std;
- const int MAXN=;
- const int MAXM=;
- const int maxn=0x7fffffff;
- inline void read(int &n)
- {
- char c='+';int x=;bool flag=;
- while(c<''||c>''){c=getchar();if(c=='-')flag=;}
- while(c>=''&&c<=''){x=x*+(c-);c=getchar();}
- flag==?n=-x:n=x;
- }
- struct node
- {
- int u,v,f,nxt;
- }edge[MAXM];
- int head[MAXN];
- int num=;
- int n,m;
- int dis[MAXN];
- bool vis[MAXN];
- inline void add_edge(int x,int y,int z)
- {
- edge[num].u=x;
- edge[num].v=y;
- edge[num].f=z;
- edge[num].nxt=head[x];
- head[x]=num++;
- }
- inline void SPFA(int s,int t)
- {
- for(int i=;i<t;i++)
- dis[i]=maxn;
- dis[s]=;
- vis[s]=;
- queue<int>q;
- q.push(s);
- while(q.size()!=)
- {
- int p=q.front();
- q.pop();
- vis[p]=;
- for(int i=head[p];i!=-;i=edge[i].nxt)
- {
- if(dis[edge[i].v]>dis[edge[i].u]+edge[i].f)
- {
- dis[edge[i].v]=dis[edge[i].u]+edge[i].f;
- if(vis[edge[i].v]==)
- {
- vis[edge[i].v]=;
- q.push(edge[i].v);
- }
- }
- }
- }
- printf("%d",dis[t]);
- }
- int main()
- {
- //freopen("bjrabbit.in","r",stdin);
- //freopen("bjrabbit.out","w",stdout);
- read(n);read(m);
- memset(head,-,sizeof(head));
- int from=;
- int to=(*(n-)*(m-))+;
- int spend,x,y;
- for(int i=;i<=n;i++)
- for(int j=;j<m;j++)
- {
- read(spend);
- x= i==? from: (*(i-)-)*(m-)+j;
- y= i==n? to : (*(i-))*(m-)+j;
- // printf("%d %d %d \n",x,y,spend);
- add_edge(x,y,spend);
- add_edge(y,x,spend);
- }
- for(int i=;i<n;i++)
- for(int j=;j<=m;j++)
- {
- read(spend);
- x= j==?to:(*(i-))*(m-)+j-;
- y= j==m?from:(*(i-))*(m-)+j-+m;
- //printf("%d %d %d \n",x,y,spend);
- add_edge(x,y,spend);
- add_edge(y,x,spend);
- }
- for(int i=;i<n;i++)
- for(int j=;j<m;j++)
- {
- read(spend);
- x=(*(i-))*(m-)+j;
- y=(*(i-)+)*(m-)+j;
- //printf("%d %d %d \n",x,y,spend);
- add_edge(x,y,spend);
- add_edge(y,x,spend);
- }
- SPFA(from,to);
- return ;
- }
752. [BJOI2006] 狼抓兔子的更多相关文章
- P4001 [BJOI2006]狼抓兔子(对偶图)
P4001 [BJOI2006]狼抓兔子 最短路+对偶图 看这题最容易想到的就是网络流.Dinic可以过,据说还跑得比正解快. 如果不写网络流,那么需要知道2个前置知识:平面图和对偶图(右转baidu ...
- BJOI2006狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 9967 Solved: 2267[Submit][S ...
- [BJOI2006]狼抓兔子
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- 1001. [BJOI2006]狼抓兔子【最小割】
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001 BJOI2006 狼抓兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- [BJOI2006]狼抓兔子(网络流)
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ1001 洛谷4001 [BJOI2006]狼抓兔子 题解
题目 这个题目有多种解法,这个题也是一个比较经典的题了,正是因为他的多样的做法,这个题主要难在建图和优化,因为这是一个网格图,所以spfa肯定过不去,所以用最短路解法的话,只能用dij,而网络流也是要 ...
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...
- P4001 [BJOI2006]狼抓兔子
传送门 思路: 不少题解都是用网络流来做最小割(网络流是什么),但对于一个不会网络流的蒟蒻来做这题相当困难. 听机房daolao说可以重构图做最短路.然后就baidu将平面图转换成一个对偶图,因为网络 ...
随机推荐
- 如何让NSURLConnection在子线程中运行
可以有两个办法让NSURLConnection在子线程中运行,即将NSURLConnection加入到run loop或者NSOperationQueue中去运行. 前面提到可以将NSTimer手动加 ...
- 【译文】采用chrome的DevTool中TimeLine和profile工具提升Web app性能
->译文,原文在这里<- 本文地址: http://www.cnblogs.com/blackmanba/p/web-perfomance-with-Chrome-DevTools.htm ...
- Codeforces 994A. Fingerprints
题意 从x数组中找到最多的y数组中有的数字,按在x数组中出现的顺序输出. 注意 这题x数组和y数组都不会出现重复数字. 代码 #include <bits/stdc++.h> using ...
- Java标识符规范
1.标识符用来定义包名,类名,方法名,变量名,常量名. 2.标识符必须由字母.下划线.$符号组成,不能以数字开头.不能是Java中的保留关键字.
- ZBrush中Blob点滴笔刷介绍
对于ZBrush®来说,笔刷的使用时至关重要的,ZBrush中给我们提供了越来越多的笔刷的同时,我们也要根据经验来合理选择笔刷.本文内容小编将分享Blob点滴笔刷的简单介绍,该笔刷在使用时笔头犹如一股 ...
- Mac 如何寻找Mac自带的IDLE
Mac 如何寻找Mac自带的IDLE 每次要打开IDLE时,需要如下动作:打开terminal --> 输入idle --> 回车,就自动打开IDLE了 图标如下: 选择在“Finder中 ...
- jquery获取自定义属性的值
//获取属性值 1 <div id="text" value="黑哒哒的盟友"><div> jQuery取值: $("#tex ...
- css3之BFC、IFC、GFC和FFC
CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC. What's FC?一定不是KFC,FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念.它 ...
- jsp基本内置标签
<jsp:foward page="url"> <jsp:param value=" " name=" "/> &l ...
- C# 鼠标左右手切换
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...