1091. Acute Stroke (30)

1.主要是考察并查集

2.每输入一个像素点,就检测它的上边,左边,上一层的位置是否为1,为1的话,归为一个集合

3.最后对集合的数量进行统计



AC代码:

//#include<string>
//#include <iomanip>
//#include<stack>
//#include<unordered_set>
//#include <sstream>
//#include "func.h"
//#include <list>
#include<unordered_map>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include <algorithm>
#include<stdio.h>
#include<iostream>
#include<string>
#include<memory.h>
#include<limits.h>
using namespace std;
int find(int*r, int x)
{
	for (; x != r[x]; x = r[x])
		r[x] = r[r[x]];
	return r[x];
}
int find(vector<int>&r, int x)
{
	for (; x != r[x]; x = r[x])
		r[x] = r[r[x]];
	return r[x];
}
int main(void)
{
	int m,n,l,t;//1286,128,60

	cin >> m >> n >> l >> t;
	char *image = new char[m*n*l];
	memset(image, 0, sizeof(image));
	//int *r = new int[m*n*l];
	//memset(r, -1, sizeof(r));
	vector<int> r(m*n*l, -1);
	for (int k = 0; k < l; k++)
	{
		for (int j = 0; j < m; j++)
		{
			for (int i = 0; i < n; i++)
			{
				int tmp = k*(m*n) + j*n + i;
				scanf("%d", &image[k*(m*n) + j*n + i]);
				if (image[k*(m*n) + j*n + i] == 1)
				{
					if (r[k*(m*n) + j*n + i] == -1)//如果为-1,则还没初始化代表,进行初始化代表为自己
						r[k*(m*n) + j*n + i] = k*(m*n) + j*n + i;
					if (i>0 && image[k*(m*n) + j*n + (i - 1)] == 1)
					{//上面
						r[find(r, k*(m*n) + j*n + i)] = find(r, k*(m*n) + j*n + (i - 1));
					}
					if (j>0 && image[k*(m*n) + (j-1)*n + i] == 1)
					{//左边
						r[find(r, k*(m*n) + j*n + i)] = find(r, k*(m*n) + (j - 1)*n + i);
					}
					if (k>0 && image[(k-1)*(m*n) + j*n + i] == 1)
					{//上一层
						r[find(r, k*(m*n) + j*n + i)] = find(r, (k - 1)*(m*n) + j*n + i);
					}
				}
			}
		}
	}
	map<int, int> hash;
	int sum = 0;
	for (int k = 0; k < l; k++)
	{
		for (int j = 0; j < m; j++)
		{
			for (int i = 0; i < n; i++)
			{
				if (image[k*(m*n) + j*n + i] == 1)
				{
					int tmp = find(r, k*(m*n) + j*n + i);
					hash[tmp]++;
					if (hash[tmp] == t)
						sum += t;
					else if (hash[tmp] > t)
						sum++;
				}
			}
		}
	}
	cout << sum << endl;
	
	
	return 0;
}


posted @ 2015-11-23 13:55  siukwan  阅读(153)  评论(0)    收藏  举报