Submission #108132

#TimeUsernameProblemLanguageResultExecution timeMemory
108132wilwxkTracks in the Snow (BOI13_tracks)C++11
3.33 / 100
2153 ms1049604 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN=4e3+5;
char v[MAXN][MAXN];
vector<int> g[MAXN*MAXN], pes[MAXN*MAXN];
int dist[MAXN];
int n, m;

int convert(int i, int j) { if(i==0||j==0) return 0; return (i-1)*m+j; }

void liga(int i, int j, int i2, int j2){
	if(i<=0||j<=0||i>n||j>m) return;
	if(i2<=0||j2<=0||i2>n||j2>m) return;
	if(v[i][j]=='.'||v[i2][j2]=='.') return;
	int a=convert(i, j); int b=convert(i2, j2);
	g[a].push_back(b);
	int peso=0;
	if(v[i][j]!=v[i2][j2]) peso=1;
	pes[a].push_back(peso);	
	// printf("liga %d e %d - %d\n", a, b, peso);
}

void bfs() {
	memset(dist, -1, sizeof(dist));
	dist[1]=1;
	deque<int> dq;
	dq.push_back(1);
	while(!dq.empty()) {
		int cur=dq.front(); dq.pop_front();
		for(int i=0; i<g[cur].size(); i++) {
			int viz=g[cur][i]; int peso=pes[cur][i];
			if(dist[viz]!=-1) continue;
			if(peso==0) dq.push_front(viz);
			else dq.push_back(viz);
			dist[viz]=dist[cur]+peso; 
		}
	}
}

int main() {
	scanf("%d %d", &n, &m);
	for(int i=1; i<=n; i++) scanf(" %s", &v[i][1]);
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			int cur=convert(i, j);
			liga(i, j, i-1, j);
			liga(i, j, i+1, j);
			liga(i, j, i, j-1);
			liga(i, j, i, j+1);
		}
	}
	bfs();

	int resp=1;
	for(int i=1; i<=n*m; i++) resp=max(resp, dist[i]);
	// for(int i=1; i<=n; i++) {
	// 	for(int j=1; j<=m; j++) {
	// 		printf("%d ", dist[convert(i, j)]);
	// 	}
	// 	printf("\n");
	// }
	printf("%d\n", resp);
}

Compilation message (stderr)

tracks.cpp: In function 'void bfs()':
tracks.cpp:31:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0; i<g[cur].size(); i++) {
                ~^~~~~~~~~~~~~~
tracks.cpp: In function 'int main()':
tracks.cpp:46:8: warning: unused variable 'cur' [-Wunused-variable]
    int cur=convert(i, j);
        ^~~
tracks.cpp:42:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &m);
  ~~~~~^~~~~~~~~~~~~~~~~
tracks.cpp:43:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=1; i<=n; i++) scanf(" %s", &v[i][1]);
                          ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...