P1514 引水入城

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct def1
{
	int x;
	int y;
} q[3000000];
struct def2
{
	int len;
	int x;
	int y;
} val[550];
int dctx[6]= {0,1,0,-1,0},dcty[6]= {0,0,1,0,-1};
int n,m,h=0,t=0,cnt=0,height[550][550];
bool vis[550][550];
bool cmp(def2 a,def2 b)
{
	if(a.x==0)return false;
	if(b.x==0)return true;
	if(a.x!=b.x)return a.x<b.x;
	else return a.y>b.y;
}
void bfs()
{
	memset(vis,0,sizeof(vis));
	for(int i=1; i<=m; i++)
	{
		t++;
		q[t].x=1;//行
		q[t].y=i;//列
		vis[1][i]=true;
	}
	while(h<=t)
	{
		h++;
		for(int i=1; i<=4; i++)
		{
			int x=q[h].x+dctx[i];
			int y=q[h].y+dcty[i];
			if(height[q[h].x][q[h].y]>height[x][y]&&(!vis[x][y]))
			{
				t++;
				q[t].x=x;
				q[t].y=y;
				vis[x][y]=true;
			}
		}
	}
}
void dfs(int x,int y)
{
	vis[x][y]=true;
	for(int i=1; i<=4; i++)
	{
		int tx=x+dctx[i],ty=y+dcty[i];
		if(height[x][y]>height[tx][ty]&&vis[tx][ty]!=true)
		{
			dfs(tx,ty);
		}
	}
}
int main()
{

	memset(height,0x3f,sizeof(height));
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			cin>>height[i][j];
	bfs();

	for(int i=1; i<=m; i++)
		if(!vis[n][i])
			cnt++;
	if(cnt!=0)
	{
		cout<<0<<endl<<cnt<<endl;
		return 0;
	}

//	dfs确定一个点可覆盖的区间[x,y]
//	for(int i=1;i<=n;i++)
//	{
//		for(int j=1;j<=m;j++)
//		cout<<vis[i][j]<<' ';
//		cout<<endl;
//	}
	cnt=0;
	for(int i=1; i<=m; i++)
	{
		memset(vis,0,sizeof(vis));
		dfs(1,i);
		cnt++;
		bool flag=false;
		for(int j=1; j<=m; j++)
		{
			if(flag==false&&vis[n][j]==true)
			{
				flag=true;
				val[cnt].x=val[cnt].y=j;
			}
			if(flag==true&&vis[n][j+1]==false)
			{
				val[cnt].y=j;
				break;
			}
		}
		val[cnt].len=val[cnt].y-val[cnt].x+1;
	}


//	贪心每次取最大覆盖区间
	int maxn=1,tot=1,i=2;
	sort(val+1,val+1+cnt,cmp);

	for(int i=1; i<=cnt; i++)
		cout<<val[i].x<<' '<<val[i].y<<endl;

	while(val[maxn].y<m)
	{
		int tmp=maxn;
		while(i<=m&&val[i].x<=val[maxn].y+1)
		{
			if(val[i].y>val[tmp].y) tmp=i;
			i++;
		}
		maxn=tmp;
		tot++;
	}
	cout<<1<<endl<<tot<<endl;
	return 0;
}

  

posted @ 2017-07-15 15:35  银河渡舟  阅读(198)  评论(0编辑  收藏  举报