#include <iostream>
#include <queue>
using namespace std;
#define MAX_SIZE (2000+1)
#define MAX_CIVILIZATION (100000+1)
#define NONE 0
#define UP 0
#define DOWN 1
#define LEFT 2
#define RIGHT 3
#define MAX_DIR 4
const struct{
int d_row,d_col;
} adj[MAX_DIR] = {{-1,0},{1,0},{0,-1},{0,1}};
#define IN_RANGE(MIN,n,MAX) ((MIN)<=(n)&&(n)<=(MAX))
typedef pair<int,int> Pos; // first:row, second:col
int N,K,grid[MAX_SIZE][MAX_SIZE];
int parent[MAX_CIVILIZATION];
int find_parent_civilization(int c)
{
int& ret = parent[c];
if( ret != c )
{
ret = find_parent_civilization(ret);
}
return ret;
}
bool merge_civilization(int current_row,int current_col,int adj_row,int adj_col)
{
int current_civilization,adj_civilization;
current_civilization = find_parent_civilization(grid[current_row][current_col]);
adj_civilization = find_parent_civilization(grid[adj_row][adj_col]);
if( adj_civilization==NONE || current_civilization==adj_civilization )
{
return false;
}
int big,small;
big = max(current_civilization,adj_civilization);
small = min(current_civilization,adj_civilization);
parent[big] = small;
return true;
}
bool get_adj_pos(const int& current_row,const int& current_col,
int& adj_row,int& adj_col,const int& direction)
{
adj_row = current_row+adj[direction].d_row;
adj_col = current_col+adj[direction].d_col;
if( !IN_RANGE(1,adj_row,N) || !IN_RANGE(1,adj_col,N) )
{
return false;
}
return true;
}
int simulate(queue<Pos>& pos_q)
{
int t;
for(t=0;K!=1;t++)
{
queue<Pos> spread;
for(int i=1,size=pos_q.size();i<=size;i++)
{
int current_row,current_col;
current_row = pos_q.front().first;
current_col = pos_q.front().second;
pos_q.pop();
for(int d=UP;d<=RIGHT;d++)
{
int adj_row,adj_col;
int current_civilization,adj_civilization;
if( get_adj_pos(current_row,current_col,adj_row,adj_col,d) == false )
{
continue;
}
current_civilization = find_parent_civilization(grid[current_row][current_col]);
adj_civilization = find_parent_civilization(grid[adj_row][adj_col]);
if( adj_civilization == NONE )
{
grid[adj_row][adj_col] = current_civilization;
spread.push(make_pair(adj_row,adj_col));
pos_q.push(make_pair(adj_row,adj_col));
}
}
}
for(;!spread.empty();)
{
int current_row,current_col;
current_row = spread.front().first;
current_col = spread.front().second;
spread.pop();
for(int d=UP;d<=RIGHT;d++)
{
int adj_row,adj_col;
int current_civilization,adj_civilization;
if( get_adj_pos(current_row,current_col,adj_row,adj_col,d) == false )
{
continue;
}
if( merge_civilization(current_row,current_col,adj_row,adj_col) == true )
{
K--;
}
}
}
}
return t;
}
void input(queue<Pos>& pos_q)
{
cin>>N>>K;
for(int i=1;i<=K;i++)
{
int row,col;
cin>>col>>row;
pos_q.push(make_pair(row,col));
grid[row][col] = parent[i] = i;
}
for(int i=1,size=pos_q.size();i<=size;i++)
{
int current_row,current_col;
current_row = pos_q.front().first;
current_col = pos_q.front().second;
pos_q.pop();
pos_q.push(make_pair(current_row,current_col));
for(int d=UP;d<=RIGHT;d++)
{
int adj_row,adj_col;
int current_civilization,adj_civilization;
if( get_adj_pos(current_row,current_col,adj_row,adj_col,d) == false )
{
continue;
}
if( merge_civilization(current_row,current_col,adj_row,adj_col) == true )
{
K--;
}
}
}
}
int main(void)
{
cin.tie(NULL);
cin.sync_with_stdio(false);
queue<Pos> pos_q;
input(pos_q);
cout<<simulate(pos_q)<<'\n';
return 0;
}
Compilation message
civilization.cpp: In function 'int simulate(std::queue<std::pair<int, int> >&)':
civilization.cpp:125:9: warning: unused variable 'current_civilization' [-Wunused-variable]
int current_civilization,adj_civilization;
^~~~~~~~~~~~~~~~~~~~
civilization.cpp:125:30: warning: unused variable 'adj_civilization' [-Wunused-variable]
int current_civilization,adj_civilization;
^~~~~~~~~~~~~~~~
civilization.cpp: In function 'void input(std::queue<std::pair<int, int> >&)':
civilization.cpp:169:8: warning: unused variable 'current_civilization' [-Wunused-variable]
int current_civilization,adj_civilization;
^~~~~~~~~~~~~~~~~~~~
civilization.cpp:169:29: warning: unused variable 'adj_civilization' [-Wunused-variable]
int current_civilization,adj_civilization;
^~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
768 KB |
Output is correct |
2 |
Correct |
5 ms |
768 KB |
Output is correct |
3 |
Correct |
5 ms |
768 KB |
Output is correct |
4 |
Correct |
5 ms |
640 KB |
Output is correct |
5 |
Correct |
6 ms |
768 KB |
Output is correct |
6 |
Correct |
5 ms |
768 KB |
Output is correct |
7 |
Correct |
6 ms |
768 KB |
Output is correct |
8 |
Correct |
6 ms |
768 KB |
Output is correct |
9 |
Correct |
6 ms |
768 KB |
Output is correct |
10 |
Correct |
5 ms |
768 KB |
Output is correct |
11 |
Correct |
5 ms |
768 KB |
Output is correct |
12 |
Correct |
6 ms |
768 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
768 KB |
Output is correct |
2 |
Correct |
5 ms |
768 KB |
Output is correct |
3 |
Correct |
5 ms |
768 KB |
Output is correct |
4 |
Correct |
5 ms |
640 KB |
Output is correct |
5 |
Correct |
6 ms |
768 KB |
Output is correct |
6 |
Correct |
5 ms |
768 KB |
Output is correct |
7 |
Correct |
6 ms |
768 KB |
Output is correct |
8 |
Correct |
6 ms |
768 KB |
Output is correct |
9 |
Correct |
6 ms |
768 KB |
Output is correct |
10 |
Correct |
5 ms |
768 KB |
Output is correct |
11 |
Correct |
5 ms |
768 KB |
Output is correct |
12 |
Correct |
70 ms |
8184 KB |
Output is correct |
13 |
Correct |
57 ms |
7288 KB |
Output is correct |
14 |
Correct |
62 ms |
7544 KB |
Output is correct |
15 |
Correct |
46 ms |
6784 KB |
Output is correct |
16 |
Correct |
14 ms |
3328 KB |
Output is correct |
17 |
Correct |
204 ms |
14200 KB |
Output is correct |
18 |
Correct |
225 ms |
14200 KB |
Output is correct |
19 |
Correct |
228 ms |
14200 KB |
Output is correct |
20 |
Correct |
227 ms |
14204 KB |
Output is correct |
21 |
Correct |
222 ms |
14200 KB |
Output is correct |
22 |
Correct |
7 ms |
4480 KB |
Output is correct |
23 |
Correct |
76 ms |
8440 KB |
Output is correct |
24 |
Correct |
6 ms |
768 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
5 ms |
768 KB |
Output is correct |
2 |
Correct |
5 ms |
768 KB |
Output is correct |
3 |
Correct |
5 ms |
768 KB |
Output is correct |
4 |
Correct |
5 ms |
640 KB |
Output is correct |
5 |
Correct |
6 ms |
768 KB |
Output is correct |
6 |
Correct |
5 ms |
768 KB |
Output is correct |
7 |
Correct |
6 ms |
768 KB |
Output is correct |
8 |
Correct |
6 ms |
768 KB |
Output is correct |
9 |
Correct |
6 ms |
768 KB |
Output is correct |
10 |
Correct |
5 ms |
768 KB |
Output is correct |
11 |
Correct |
5 ms |
768 KB |
Output is correct |
12 |
Correct |
70 ms |
8184 KB |
Output is correct |
13 |
Correct |
57 ms |
7288 KB |
Output is correct |
14 |
Correct |
62 ms |
7544 KB |
Output is correct |
15 |
Correct |
46 ms |
6784 KB |
Output is correct |
16 |
Correct |
14 ms |
3328 KB |
Output is correct |
17 |
Correct |
204 ms |
14200 KB |
Output is correct |
18 |
Correct |
225 ms |
14200 KB |
Output is correct |
19 |
Correct |
228 ms |
14200 KB |
Output is correct |
20 |
Correct |
227 ms |
14204 KB |
Output is correct |
21 |
Correct |
222 ms |
14200 KB |
Output is correct |
22 |
Correct |
7 ms |
4480 KB |
Output is correct |
23 |
Correct |
76 ms |
8440 KB |
Output is correct |
24 |
Correct |
220 ms |
13816 KB |
Output is correct |
25 |
Correct |
265 ms |
15992 KB |
Output is correct |
26 |
Correct |
176 ms |
15348 KB |
Output is correct |
27 |
Correct |
204 ms |
14200 KB |
Output is correct |
28 |
Correct |
140 ms |
13944 KB |
Output is correct |
29 |
Correct |
910 ms |
25196 KB |
Output is correct |
30 |
Correct |
729 ms |
20344 KB |
Output is correct |
31 |
Correct |
991 ms |
29220 KB |
Output is correct |
32 |
Execution timed out |
1004 ms |
29100 KB |
Time limit exceeded |
33 |
Halted |
0 ms |
0 KB |
- |