CodeForces 723D Lakes in Berland DFS

来源:互联网 发布:调音软件哪个好 编辑:程序博客网 时间:2024/05/29 07:37
#include<bits/stdc++.h>using namespace std;const int MAX=55;const int Dx[4]={0,-1,1,0};const int Dy[4]={1,0,0,-1};int N,M,K,Mark[MAX][MAX],Hash[MAX*MAX],Cnt=0,Ans=0;vector<pair<int,int> > V;set<int> S;char G[MAX][MAX];void dfs(int x,int y){    if (x<0||x>N-1||y<0||y>M-1||G[x][y]!='.'||Mark[x][y]!=-1)        return;    Mark[x][y]=Cnt;    Hash[Cnt]+=1;    for (int i=0;i<4;i++)        dfs(x+Dx[i],y+Dy[i]);}void init(int x,int y){    if (x<0||x>N-1||y<0||y>M-1||G[x][y]!='.')        return;    G[x][y]='x';    for (int i=0;i<4;i++)        init(x+Dx[i],y+Dy[i]);}int main(){    memset(Mark,-1,sizeof(Mark));    memset(Hash,0,sizeof(Hash));    cin>>N>>M>>K;    for (int i=0;i<N;i++)        cin>>G[i];    for (int i=0;i<N;i++) {        init(i,0);        init(i,M-1);    }    for (int j=0;j<M;j++) {        init(0,j);        init(N-1,j);    }    for (int i=0;i<N;i++)        for (int j=0;j<M;j++)            if (G[i][j]=='.'&&Mark[i][j]==-1) {                dfs(i,j);                V.push_back(make_pair(Hash[Cnt],Cnt));                Cnt+=1;            }    sort(V.begin(),V.end());    for (int i=0,j=V.size()-K;i<j;i++) {        Ans+=V[i].first;        S.insert(V[i].second);    }    cout<<Ans<<endl;    for (int i=0;i<N;i++) {        for (int j=0;j<M;j++)            if (Mark[i][j]!=-1&&S.find(Mark[i][j])!=S.end())                cout<<'*';            else if (G[i][j]=='x')                cout<<'.';            else                cout<<G[i][j];        cout<<endl;    }    return 0;}
0 0