Pagini recente » Cod sursa (job #1942063) | Cod sursa (job #2322384) | Cod sursa (job #2784794) | Cod sursa (job #2462741) | Cod sursa (job #2669188)
#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
}