Cod sursa(job #2669188)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 6 noiembrie 2020 13:25:49
Problema Matrice 2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <bits/stdc++.h>
#define pb push_back
#define ll long long
using namespace std;
ifstream f("matrice2.in");
ofstream g("matrice2.out");
const int NMAX=300;
int n,q;
int a[NMAX+5][NMAX+5],k;
struct structura
{
    int lin;
    int col;
    int val;
};
structura v[NMAX*NMAX+5];
int cnt[NMAX+5][NMAX+5];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
vector<pair<int,int> > forest[NMAX*NMAX+5];
bool cmp(structura a,structura b)
{
    return a.val>b.val;
}
void unite(int x,int y)
{
    if (forest[x].size()>forest[y].size())
    {
        for(int i=0;i<forest[y].size();i++)
        {
            forest[x].pb(forest[y][i]);
            cnt[forest[y][i].first][forest[y][i].second]=x;
        }
    }
    else
    {
        for(int i=0;i<forest[x].size();i++)
        {
            forest[y].pb(forest[x][i]);
            cnt[forest[x][i].first][forest[x][i].second]=y;
        }
    }
}
int main()
{
    f>>n>>q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            f>>a[i][j];
            v[++k].val=a[i][j];
            v[k].lin=i;
            v[k].col=j;
        }
    }
    sort(v+1,v+k+1,cmp);
    for(int i=1;i<=k;i++)
    {
        int x=v[i].lin;
        int y=v[i].col;
        cnt[x][y]=i;
        for(int dir=0;dir<4;dir++)
        {
            int xx=x+dx[dir];
            int yy=y+dy[dir];
            if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&cnt[xx][yy]!=0)
            {
                if(cnt[xx][yy]!=cnt[x][y])
                {
                    unite(cnt[xx][yy],cnt[x][y]);
                }
            }
        }

    }
    ///trebuie sa mai raspund la queery









}