Last active
July 11, 2017 15:27
-
-
Save IvanIsCoding/6adada792195b043a8e5337ce08d8a51 to your computer and use it in GitHub Desktop.
Seletiva IOI 2015
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Ivan Carvalho | |
// Caminho - Seletiva IOI - OBI 2015 | |
#include <bits/stdc++.h> | |
#define MP make_pair | |
#define TAMANHO first | |
#define X second.first | |
#define Y second.second | |
#define MAXN 302 | |
using namespace std; | |
typedef pair<int,int> ii; | |
typedef pair<int,ii> iii; | |
int grafo[MAXN][MAXN],visitado[MAXN][MAXN],ordem,ini=1,fim=1000000000,resp1,resp2; | |
int bfs(int maior){ | |
for(int i=1;i<=ordem;i++) for(int j=1;j<=ordem;j++) visitado[i][j] = 0; | |
if (grafo[1][1] > maior) return -1; | |
queue<iii> fila; | |
fila.push(MP(1,MP(1,1))); | |
while(!fila.empty()){ | |
iii d = fila.front(); | |
fila.pop(); | |
int tamanho = d.TAMANHO, x = d.X, y = d.Y; | |
if (visitado[x][y]) continue; | |
if (ordem == x && ordem == y){ | |
return tamanho; | |
} | |
visitado[x][y] = 1; | |
if (x +1 <= ordem && grafo[x+1][y]<=maior) fila.push(MP(tamanho+1,MP(x+1,y))); | |
if (y +1 <= ordem && grafo[x][y+1]<=maior) fila.push(MP(tamanho+1,MP(x,y+1))); | |
if (x - 1 >= 1 && grafo[x-1][y]<=maior) fila.push(MP(tamanho+1,MP(x-1,y))); | |
if (y - 1 >= 1 && grafo[x][y-1]<=maior) fila.push(MP(tamanho+1,MP(x,y-1))); | |
} | |
return -1; | |
} | |
int main(){ | |
scanf("%d",&ordem); | |
for(int i=1;i<=ordem;i++){ | |
for(int j=1;j<=ordem;j++){ | |
scanf("%d",&grafo[i][j]); | |
ini = min(grafo[i][j],ini); | |
fim = max(fim,grafo[i][j]); | |
} | |
} | |
while(ini <= fim){ | |
int meio = (ini+fim)/2; | |
int wannabe = bfs(meio); | |
if (wannabe == -1){ | |
ini = meio + 1; | |
} | |
else{ | |
fim = meio - 1; | |
resp1 = wannabe; | |
resp2 = meio; | |
} | |
} | |
printf("%d %d\n",resp2,resp1); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment