Submission #66309

#TimeUsernameProblemLanguageResultExecution timeMemory
66309quoriessRaspad (COI17_raspad)C++14
26 / 100
6088 ms14408 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
vector<vector<int> > dizi;
vector<int> setler,rankler;
int findset(int a){
	if(setler[a]==a)return a;
	setler[a]=findset(setler[a]);
	return setler[a];
}
int setsay=0;
void unyon(int a,int b){
	
	int fa=findset(a),fb=findset(b);
	if(fa==fb)return;
	setsay--;
	//cout << "setsay azaldı: "<<setsay<<"\n";
	if(rankler[fa]>rankler[fb])setler[fb]=fa;
	else if(rankler[fb]>rankler[fa])setler[fa]=fb;
	else{
		rankler[fa]=rankler[fb]+1;
		setler[fb]=fa;
	}
}
int main(){
	int n,m;
	cin>>n>>m;
	//cout <<"aldı\n";
	dizi=vector<vector<int> >(n,vector<int>(m,0));
	setler=rankler=vector<int>(n*m,0);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			char c;
			cin>>c;
			dizi[i][j]=c-48;
		}
	}
	//cout <<"aldı\n";
	for (int i = 0; i < n*m; i++)
	{
		setler[i]=i;
	}
	lli tplm=0;
	for (int i = 0; i < n; i++)
	{
		//cout << "tplm: "<<tplm<<"\n";
		setler=rankler=vector<int>(n*m,0);

		for (int i = 0; i < n*m; i++)
		{
			setler[i]=i;
		}
		setsay=0;
		for (int j = i; j < n; j++)
		{
			for (int k = 0; k < m; k++)
			{
				if(!dizi[j][k])continue;
				
				setsay++;
				if(j!=i&&dizi[j-1][k])
					unyon(m*j+k,m*j-m+k);
				if(k!=0&&dizi[j][k-1])
					unyon(m*j+k,m*j+k-1);
				
			}
			//cout << "i: "<<i<<" j: "<<j<<" setsay: "<<setsay<<"\n";
			tplm+=setsay;
			//cout << "setsay:"<<setsay<<"\n";
		}
	}
	cout<<tplm<<"\n";
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...