Untitled
unknown
plain_text
3 years ago
1.3 kB
11
Indexable
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
bool val(int n, int i, int j, vector<vector<ll>> v)
{
if(i<0||j<0||i>=n||j>=n||v[i][j]==-1)
return false;
return true;
}
void dfs(int i, int j, vector<vector<ll>> v, vector<vector<ll>> &cc,int k)
{
cc[i][j]=k;
for(int x=0;x<4;x++)
{
if(val((int)v.size(),i+dx[x],j+dy[x],v) && cc[i+dx[x]][j+dy[x]]!=k)
{
dfs(i+dx[x],j+dy[x],v,cc,k);
}
}
}
int main() {
// your code goes here
int n;
cin>>n;
vector<vector<ll>> v(n,vector<ll> (n)),cc(n,vector<ll> (n,0));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>v[i][j];
}
}
int k=1;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(val(n,i,j,v) && cc[i][j]==0)
{
dfs(i,j,v,cc,k);
k++;
}
}
}
/*vector<set<ll>> f(1e6+10,0);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
f[v[i][j]].insert(cc[i][j]);
}
}*/
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
//cout<<ans<<" ";
int x=v[i][j];
if(x==-1)
{
ans--;
continue;
}
for(int ii=0;ii<n;ii++)
{
for(int jj=0;jj<n;jj++)
{
if(v[ii][jj]==-1)
continue;
if(cc[ii][jj]!=cc[i][j] && v[ii][jj]%x==0)
{
ans+=v[ii][jj];
}
}
}
}
}
cout<<ans<<endl;
return 0;
}Editor is loading...