40分求助!!!!
  • 板块学术版
  • 楼主_YUZIhaizhao_
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/8/29 14:41
  • 上次更新2023/11/4 08:38:47
查看原帖
40分求助!!!!
362325
_YUZIhaizhao_楼主2021/8/29 14:41

P1514 [NOIP2010 提高组] 引水入城

蒟蒻求助。(哭哭哭哭

大佬酷来康康(第三个测试点RE了)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int a[501][501],m,n,ans,b[501],sum;
bool vis[501][501];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
struct point
{
    int x,y;
};
queue<point> q;
void bfs(int u,int v)
{
    point start;
    start.x=u;
    start.y=v;
    vis[u][v]=true;
    q.push(start);
    //cout<<a[u][v]<<" ";
    while(!q.empty())
    {
        int x=q.front().x,y=q.front().y;
        for(int k=0;k<=3;k++)
        {
            int tx,ty;
            tx=dx[k]+x;
            ty=dy[k]+y;
            if(a[x][y]>a[tx][ty]&&vis[tx][ty]==false)
            {
            	//cout<<a[tx][ty]<<" ";
                point temp;
                temp.x=tx;
                temp.y=ty;
                q.push(temp);
                vis[tx][ty]=true;
            }
            else
                continue;
        }
        q.pop();
    }
    //printf("\n\n");
    return;
}
int main()
{
    memset(vis,false,sizeof(vis));
    memset(a,0x3f3f3f3f,sizeof(a));
    cin>>m>>n;
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    for(int i=1;i<=n;i++)
        if(a[1][i]<a[1][i+1]&&i<n)
            b[i]=i+1;
    
    //for(int i=1;i<=n;i++)
    //    cout<<b[i]<<" ";
    //cout<<endl; 
    for(int i=1;i<=n;i++)
        if(!vis[1][i]&&b[i]==0)
        {
        	ans++;
			bfs(1,i);
        }
        else
            if(!vis[1][i])
            {
				while(b[i]!=0)
				    i=b[i];
				ans++;
				bfs(1,i);
			}
    //cout<<endl;
    for(int i=1;i<=n;i++)
		if(!vis[m][i])
		    sum++;
	if(sum!=0)
	{
		cout<<0<<endl;
		cout<<sum;
		return 0;
	}
	else
	    cout<<1<<endl;
    cout<<ans;
    return 0;
}
2021/8/29 14:41
加载中...