Submission #1178941

#TimeUsernameProblemLanguageResultExecution timeMemory
1178941punittTracks in the Snow (BOI13_tracks)C++20
27.40 / 100
868 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back

void solve() {

	/*
		The component of starting index and every occurence of the other animal connected to this component will contritue at most 2 (1 if not other animal is present)
			Now other tham it, every component will contribute one each
	*/

	int n,m;
	cin >> n >> m;

	vector< string > mt(n);
	for( auto & e : mt )
		cin >> e;

	int ans = 1;
	bool first = true, ok = false;
	vector< vector<int> >vis(n, vector<int>(m));
	int dr[] = {-1,1,0,0};
	int dc[] = {0,0,-1,1};


	auto dfs = [&]( int x, int y, auto&dfs )->void{

		vis[x][y] = 1;
		for( int i = 0 ; i < 4 ; i++ ){
			int nr = x+dr[i];
			int nc = y+dc[i];
			if( nr >= 0 && nr < n && nc >= 0 && nc < m ){

				if( !vis[nr][nc] &&  mt[nr][nc] == mt[x][y]  )
					dfs( nr, nc, dfs );

				//  F se R mai krna hai, but R to only R 
				if( first ){
					if( !vis[nr][nc] && mt[nr][nc] != '.' &&  mt[nr][nc] != mt[x][y] && mt[x][y] == mt[0][0] ){
						ok = true;
						dfs(nr, nc, dfs );
					}
				}

			}
		}
		return;
	};


	dfs( 0,0, dfs );
	first = false;
	if( ok )
		ans++;

	for( int i = 0 ; i < n ; i++ ){
		for( int j = 0 ; j < m ; j++ ){
			if( mt[i][j] != '.' &&  !vis[i][j] ){
				dfs(i, j, dfs );
				ans++;
			}
		}
	}

	cout << ans << endl;

}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int t = 1 ;
    // cin >> t;
    while (t--) 
        solve();
    return 0;
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...