hdu 4444 Walk【2012 ACM/ICPC 金华区域赛C题】

这题在金华赛区没有做出来是我们最大的遗憾,图论题,是属于我的范围,可是我去搞对我们来说更难的D题了,是道物理题

其实这题当时我们已经搞出来了,思路和算法都是没有问题的,最后发现是什么地方没有初始化,最tm坑爹的是怎么都找不到这个地方。。。!!悲了个剧啊。。

然后没时间了怒跪!

最后5题拿银。。。其实过了这题我们也没金,6题两个队没有金,而我们的罚时肯定比他们高,算了下过了的话有1000多。。。

这题的话实际上就是离散化,细节就是每离散化一个点都要增加两个单位坐标,因为还要留一个间隙

然后完全建好了图之后就是一个三维的最短路,由于每条路的长度都是一样的也可以理解成是三维的bfs,spfa直接秒掉

#pragma comment(linker, "/STACK:102400000,102400000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#ifdef _WIN32
#define i64 __int64
#define out64 "%I64d\n"
#define in64 "%I64d"
#else
#define i64 long long
#define out64 "%lld\n"
#define in64 "%lld"
#endif
/************ for topcoder by zz1215 *******************/
#define FOR(i,a,b)      for( int i = (a) ; i <= (b) ; i ++)
#define FF(i,a)        for( int i = 0 ; i < (a) ; i ++)
#define FFD(i,a,b)      for( int i = (a) ; i >= (b) ; i --)
#define S64(a)          scanf(in64,&a)
#define SS(a)           scanf("%d",&a)
#define LL(a)           ((a)<<1)
#define RR(a)           (((a)<<1)+1)
#define pb              push_back
#define pf              push_front
#define X               first
#define Y               second
#define CL(Q)           while(!Q.empty())Q.pop()
#define MM(name,what)   memset(name,what,sizeof(name))
#define MC(a,b)         memcpy(a,b,sizeof(b))
#define MAX(a,b)        ((a)>(b)?(a):(b))
#define MIN(a,b)        ((a)<(b)?(a):(b))
#define read            freopen("in.txt","r",stdin)
#define write           freopen("out.txt","w",stdout)

const int inf = 0x3f3f3f3f;
const i64 inf64 = 0x3f3f3f3f3f3f3f3fLL;
const double oo = 10e9;
const double eps = 10e-9;
const double pi = acos(-1.0);
const int maxn = 400;
const int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};

struct zz
{
	int x,y;
	int x2,y2;
}zx;

int sx,sy,ex,ey;
int n;
vectorv;
vectorfx;
vectorfy;
mapmx;
mapmy;

int ix,iy;
int a[maxn][maxn];
int dp[maxn][maxn][4];

void gao(int x,int y,int x2,int y2)
{
	for(int i=x;i<=x2;i++)
	{
		a[i][y]++;
	}
	for(int i=y+1;i<=y2;i++)
	{
		a[x][i]++;
		a[x2][i]++;
	}
	for(int i=x+1;i=0 && x<=ix && y>=0 && y<=iy)
	{
		return true;
	}
	return false;
}

int bfs()
{
	ix+=2;
	iy+=2;
	for(int i=0;i<=ix;i++)
	{
		for(int j=0;j<=iy;j++)
		{
			for(int u=0;u<4;u++)
			{
				dp[i][j][u]=inf;
				inq[i][j][u]=false;
			}
		}
	}
	queueq;
	for(int i=0;i<4;i++)
	{
		dp[sx][sy][i]=0;
		inq[sx][sy][i]=true;
		ax.x = sx;
		ax.y = sy;
		ax.z = i;
		q.push(ax);
	}
	aa now,to;
	int temp;
	while(!q.empty())
	{
		now = q.front();
		q.pop();
		for(int i=0;i<4;i++)
		{
			to.x = now.x + dir[i][0];
			to.y = now.y + dir[i][1];
			to.z = i;
			if(yes(to.x,to.y) && a[to.x][to.y]<2)
			if(to.z == now.z)
			{
				temp = dp[now.x][now.y][now.z];
				if(temp < dp[to.x][to.y][to.z])
				{
					dp[to.x][to.y][to.z] = temp;
					if(!inq[to.x][to.y][to.z])
					{
						inq[to.x][to.y][to.z]=true;
						q.push(to);
					}
				}
			}
			else
			{
				temp = dp[now.x][now.y][now.z]+1;
				if(temp>sx>>sy>>ex>>ey)
	{
		if(!sx && !sy && !ex && !ey) return 0;
		cin>>n;
		fx.clear();
		fy.clear();
		mx.clear();
		my.clear();
		v.clear();
		for(int i=1;i<=n;i++)
		{
			SS(zx.x);SS(zx.y);
			SS(zx.x2);SS(zx.y2);
			v.pb(zx);
			fx.pb(zx.x);
			fx.pb(zx.x2);
			fy.pb(zx.y);
			fy.pb(zx.y2);
		}
		fx.pb(sx);
		fx.pb(ex);
		fy.pb(sy);
		fy.pb(ey);
		sort(fx.begin(),fx.end());
		sort(fy.begin(),fy.end());
		ix = 1;
		for(int i=0;i


你可能感兴趣的:(hdu 4444 Walk【2012 ACM/ICPC 金华区域赛C题】)