Cod sursa(job #2864225)

Utilizator NeganAlex Mihalcea Negan Data 7 martie 2022 18:20:03
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#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;
}