CF 329B(Biridian Forest-贪心-非二分) (二)

2014-11-23 22:37:18 ? 作者: ? 浏览: 10
s zero, it means that the cell is not occupied by any breeder).

It is guaranteed that it will be possible for you to go from your starting position to the exit cell through a sequence of moves.

Output
A single line denoted the minimum possible number of mikemon battles that you have to participate in if you pick a strategy that minimize this number.

Sample test(s)
input
5 7
000E0T3
T0TT0T0
010T0T0
2T0T0T0
0T0S000
output
3
input
1 4
SE23
output
2
Note
The following picture illustrates the first example. The blue line denotes a possible sequence of moves that you should post in your blog:


The three breeders on the left side of the map will be able to battle you — the lone breeder can simply stay in his place until you come while the other two breeders can move to where the lone breeder is and stay there until you come. The three breeders on the right does not have a way to battle you, so they will stay in their place.

For the second example, you should post this sequence in your Blog:


Here's what happens. First, you move one cell to the right.


Then, the two breeders directly to the right of the exit will simultaneously move to the left. The other three breeder cannot battle you so they will do nothing.


You end up in the same cell with 2 breeders, so 2 mikemon battles are conducted. After those battles, all of your opponents leave the forest.


Finally, you make another move by leaving the forest.


一句话题解:所有人到终点等它即可。。。

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (1000+10) 
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
typedef long long ll;
int n,m,tx,ty,sx,sy;
char c[MAXN][MAXN];
bool b[MAXN][MAXN]={0};
int qx[MAXN*MAXN],qy[MAXN*MAXN],head=1,tail=1,d[MAXN][MAXN];
void bfs()
{
	qx[1]=tx,qy[1]=ty;b[tx][ty]=1;
	memset(d,127,sizeof(d));d[tx][ty]=0;
	while (head<=tail)
	{
		int x=qx[head],y=qy[head];
		if (1 
 

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: