比赛 |
2025暑期集训第8场 |
评测结果 |
AAAAAAAAAA |
题目名称 |
引水入城 |
最终得分 |
100 |
用户昵称 |
Hollow07 |
运行时间 |
0.963 s |
代码语言 |
C++ |
内存使用 |
4.85 MiB |
提交时间 |
2025-08-13 10:21:12 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct node{
ll x,y,h;
};
vector<ll> water[510];
ll mp[510][510],n,m,last[510];
bool vis[510][510],flag[510];
ll ans,ans2,maxn,maxm;
bool check=1;
queue<node> q;
void bfs(ll x){
memset(vis,0,sizeof(vis));
q.push({1,x,mp[1][x]});
while(!q.empty()){
ll nx=q.front().x,ny=q.front().y,nh=q.front().h;
q.pop();
if(vis[nx][ny]) continue;
vis[nx][ny]=1;
if(nx==n) water[ny].push_back(x);
if(nx+1<=n&&mp[nx+1][ny]<nh){
q.push({nx+1,ny,mp[nx+1][ny]});
}if(ny+1<=m&&mp[nx][ny+1]<nh){
q.push({nx,ny+1,mp[nx][ny+1]});
}if(nx-1>=1&&mp[nx-1][ny]<nh){
q.push({nx-1,ny,mp[nx-1][ny]});
}if(ny-1>=1&&mp[nx][ny-1]<nh){
q.push({nx,ny-1,mp[nx][ny-1]});
}
}
}
int main(){
// freopen("in.in","r",stdin);
freopen("flow.in","r",stdin);
freopen("flow.out","w",stdout);
scanf("%lld %lld",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%lld",&mp[i][j]);
}
}
for(int i=1;i<=m;i++) bfs(i);
for(int i=1;i<=m;i++){
if(!water[i].size()){
check=0;
ans2++;
}
}
if(!check){
printf("0\n%lld",ans2);
return 0;
}
for(int i=1;i<=m;i++){
for(int j=0;j<water[i].size();j++){
last[water[i][j]]=i;
}
}
for(int i=1;i<=m;i++){
bool flag2=0;
for(int j=0;j<water[i].size();j++){
if(flag[water[i][j]]==1){
flag2=1;
break;
}
}
if(flag2==0){
maxn=0;maxm=0;ans++;
for(int j=0;j<water[i].size();j++){
if(last[water[i][j]]>maxn){
maxn=last[water[i][j]];
maxm=j;
}
}
flag[water[i][maxm]]=1;
}
}
printf("1\n%lld",ans);
return 0;
}