Pagini recente » Cod sursa (job #2533309) | Cod sursa (job #3175626) | Cod sursa (job #2151987) | Cod sursa (job #2834214) | Cod sursa (job #2706407)
#include <iostream>
using namespace std;
const int NMAX = 100002;
int father[NMAX], sol[NMAX];
pair <int, int> muchii[500002];
int n, m;
int dx[] = {0, -1, 0, 1};
int dy[] = {1, 0, -1, 0};
inline void Union(int x, int y)
{
father[y] = x;
cnt[x] += cnt[y];
}
int Find(int x)
{
int r = x;
while (father[r] != 0)
r = father[r];
int aux;
while (x != r)
{
aux = father[x];
father[x] = r;
x = aux;
}
return r;
}
int main()
{
int conex;
cin >> n;
for(i = 1;i <= n * n;i++)
cnt[i] = 1;
int op, x, y, maxim = 1, j, q;
while(cin >> lin[i] >> col[i])
m++;
for(int i = m;i >= 1;i--)
{
x = lin[i];
y = col[i];
a[x][y] = 1;
for(k = 0;k < 4;k++)
{
j = x + dx[k];
q = y + dy[k];
if(a[j][q] != 0)
{
int t = Find(x * m + y);
int s = Find(j * m + q);
if(t != s)
{
Union(t, s);
}
}
}
}
for(int i = 1;i <= m;i++)
cout << sol[i] << "\n";
return 0;
}