社区讨论

求条

P1514[NOIP 2010 提高组] 引水入城参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mjnthqml
此快照首次捕获于
2025/12/27 12:45
2 个月前
此快照最后确认于
2025/12/27 16:56
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define miao main
using namespace std;
int n,m;
bool flag[505];
struct cmp{
	bool operator ()(const pair<int,int> &x,const pair<int,int> &y) const{
		return x.first<y.first;
	}
};
multiset<pair<int,int>,cmp> fg;
int arr[505][505];
int l,r;
bool vis[505][505];
void dfs(int x,int y){
    if(vis[x][y]){
    	return ;
	} 
    vis[x][y]=1;
    if(x==n){ 
        l=min(l,y);
        r=max(r,y);
    }
    if(x>1&&arr[x-1][y]<arr[x][y]){
        dfs(x-1,y);
    }
    if(x<n&&arr[x+1][y]<arr[x][y]){
        dfs(x+1,y);
    }
    if(y>1&&arr[x][y-1]<arr[x][y]){
        dfs(x,y-1);
    }
    if(y<m&&arr[x][y+1]<arr[x][y]){
        dfs(x,y+1);
    }
    return ;
}
int miao(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>n>>m;  
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>arr[i][j];
		}
	}
	memset(flag,0,sizeof(flag));
	for(int j=1;j<=m;j++){  
		memset(vis,0,sizeof(vis));  
		l=INT_MAX,r=INT_MIN;
		dfs(1,j);
		if(l<=r){
			fg.insert({l,r});
		}
	}
	for(auto v:fg){
		for(int i=v.first;i<=v.second;i++){
			flag[i]=1;
		}
	}
	int cnt=0;
	for(int i=1;i<=m;i++){ 
		if(!flag[i]){
			cnt++;
		}
	}
	if(cnt){
		cout<<0<<'\n'<<cnt;
		return 0;
	}
	cnt=0;
	int ed=0,maxx=0;
	vector<pair<int,int>> vec(fg.begin(),fg.end());
	int i=0;
	while(ed<m){
		maxx=ed;
		while(i<vec.size()&&vec[i].first<=ed+1){
			maxx=max(maxx,vec[i].second);
			i++;
		}
		ed=maxx;
		cnt++;
	}
	cout<<1<<'\n'<<cnt;
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...