1091. Acute Stroke (30)解题报告
来源:互联网 发布:新疆人口普查数据 编辑:程序博客网 时间:2024/06/06 00:42
这实际上是并查集问题。题目要求的输出就是不小于T大小的集合里面含有的所有元素的数量。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;void setunion(int s[], int i, int j);int findroot(int s[], int i);int main(int argc, char** argv) {int *s, m, n, l, t, i, j, k, tmp, index, cnt;bool *matrix;scanf("%d %d %d %d", &m, &n, &l, &t);s = new int[m * n * l];matrix = new bool[m * n * l];for(i = 0; i < l; i++){for(j = 0; j < m; j++){for(k = 0; k < n; k++){s[i * m * n + j * n + k] = -1;}}}for(i = 0; i < l; i++){for(j = 0; j < m; j++){for(k = 0; k < n; k++){scanf("%d", &tmp);if(tmp){matrix[i * m * n + j * n + k] = true;}else{matrix[i * m * n + j * n + k] = false;}}}}for(i = 0; i < l; i++){for(j = 0; j < m; j++){for(k = 0; k < n; k++){index = i * m * n + j * n + k;if(matrix[index]){if(i - 1 >= 0 && matrix[(i - 1) * m * n + j * n + k]){setunion(s, index, (i - 1) * m * n + j * n + k);}if(j - 1 >= 0 && matrix[i * m * n + (j - 1) * n + k]){setunion(s, index, i * m * n + (j - 1) * n + k);}if(k - 1 >= 0 && matrix[i * m * n + j * n + k - 1]){setunion(s, index, i * m * n + j * n + k - 1);}}}}}cnt = 0;for(i = 0; i < l; i++){for(j = 0; j < m; j++){for(k = 0; k < n; k++){index = i * m * n + j * n + k;if(matrix[index] && s[index] < 0 && -s[index] >= t){cnt += (-s[index]);}}}}printf("%d", cnt);delete[] s;delete[] matrix;return 0;}void setunion(int s[], int i, int j){int root1, root2;root1 = findroot(s, i);root2 = findroot(s, j);if(root1 == root2){return;}if(s[root1] < s[root2]){s[root1] += s[root2];s[root2] = root1;}else{s[root2] += s[root1];s[root1] = root2;}return;}int findroot(int s[], int i){if(s[i] < 0){return i;}else{return s[i] = findroot(s, s[i]);}}
0 0
- 1091. Acute Stroke (30)解题报告
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke(30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 读论文写论文——MEMORY NETWORKS
- Mail merge region 'tablePrint' is badly formed. TableStart and TableEnd should be in the same sectio
- nginx做web服务器负载均衡
- shader中面的剔除 (cull)
- Unity开发项目应该一开始规划好哪些内容?如何避免后期巨坑?
- 1091. Acute Stroke (30)解题报告
- web 端 gantt组件选型
- Ubuntu安装Apache+MySQL+PHP
- Hibernate框架学习(第四讲)---持久化对象状态
- 三.CSRF
- 382. Linked List Random Node
- C语言中的随机数
- Executors VS ThreadPoolExecutor
- 关于Select方法的使用