Farm Irrigation

2024-02-03 14:18
文章标签 farm irrigation

本文主要是介绍Farm Irrigation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这题为并查集的联通问题,主要找到能否联通Merge的条件就可以解决

#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
int parent[2600];
struct student{int up;int left;int down;int right;
}node[60][60];
int find(int x){if(x != parent[x])parent[x] = find(parent[x]);return parent[x];
}
void Merge(int a,int b){int c = find(a);int d = find(b);if(c != d)parent[d] = c;
}
int main(){int n,m;char ch;while(~scanf("%d %d",&n,&m)){if(n < 0 || m < 0)break;memset(node,0,sizeof(node));for(int i = 1 ; i <= n * m ; i++)parent[i] = i;for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= m ; j++){cin>>ch;switch(ch){//结构体联通 case 'A':node[i][j].up = 1;node[i][j].left = 1;break;case 'B':node[i][j].up = 1;node[i][j].right = 1;break;case 'C':node[i][j].left = 1;node[i][j].down = 1;break;case 'D':node[i][j].down = 1;node[i][j].right = 1;break;case 'E':node[i][j].up = 1;node[i][j].down = 1;break;case 'F':node[i][j].left = 1;node[i][j].right = 1;break;case 'G':node[i][j].up = 1;node[i][j].right = 1;node[i][j].left = 1;break;case 'H':node[i][j].up = 1;node[i][j].down = 1;node[i][j].left = 1;break;case 'I':node[i][j].left = 1;node[i][j].right = 1;node[i][j].down = 1;break;case 'J':node[i][j].up = 1;node[i][j].right = 1;node[i][j].down = 1;break;case 'K':node[i][j].down = 1;node[i][j].left = 1;node[i][j].up = 1;node[i][j].right = 1;break;}//联通的条件 if(j >= 2 && node[i][j - 1].right && node[i][j].left)Merge((i - 1) * n + j , (i - 1) * n + j - 1);if(i >= 2 && node[i][j].up && node[i - 1][j].down)Merge((i - 1) * n + j , (i - 2) * n + j);}getchar();}int count = 0;for(int i = 1 ; i <= n * m ; i++){if(find(i) == i)count++;}printf("%d\n",count);}return 0;
}


这篇关于Farm Irrigation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/674414

相关文章

hdu 1198 Farm Irrigation(并查集)

题目:         链接:点击打开链接 题意: 思路: 代码: #include<iostream>#include<cstdio>using namespace std;char a[11][5]={"1010","1001","0110","0101","1100","0011","1011","1110","0111","1101","1111"};int fathe

poj 2135 Farm Tour(最小费用流)

思路: 求往返不能经过同一条道路两次,参观路线最小的最小值.可以转话为边的流量为1,总流量为2的最小费用流 约束: 1<= N <= 1000 1<= M <= 10000 1<= ai, bi <= N 1 <= ci <= 35000 /************************************************ Author: fisty* Create

hdu 1198 Farm Irrigation (并查集图形的部分)

首先根据题意上的图形,对map的各个方向赋值,油管道的方向赋值为一; 最后根据地形数组p详细记录了各个点各个方向上的信息; 最后先对行进行比较,将满足题意的进行合并,然后最一列一列的将满足题意的合并;   #include"stdio.h" #include"string.h" int pre[10000],p[600][600][4]; int map[11][4]={1,1,-1,-1

洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver(并查集)

展开 题目描述 Farmer John and his cows are planning to leave town for a long vacation, and so FJ wants to temporarily close down his farm to save money in the meantime. The farm consists of NN barns connec

[USACO16OPEN]Closing the Farm 题解

本题有两道一模一样的题目,改个数据范围即可 AC。 题目1 | 题目2 题意简述 给定一张无向图,每次删去一个点,问每次操作后图是否联通。 分析 判断图是否联通可以想到使用并查集来维护。但是并查集很难实现删除操作,那如何处理呢? 并查集的核心是“并”和“查”,既然题目要求每次删去一个点,那不如反过来想,倒序处理,把删点变成加点,这样处理起来就非常方便快捷了。 代码实现 #inclu

新版本持续进击,只为给Plato Farm生态赋能

作为走在区块链社区前沿的一员,笔者看到最近全球玩家们提的最多的一个项目就是Plato Farm。 从目前来看,2022年必然是元宇宙正式造富的元年。而其中的代表,即是PlatoFarm-这款火热一时的真正元宇宙。     Plato Farm 同样没有辜负社区的期待,动作频频。2.16日,Plato Farm DAO投票通过OEC跨链提案,新版本支持OEC链,PlatoFarm本次

Plato Farm顶级机构支持,塑造明星元宇宙项目

元宇宙概念越来越火了,也成了资本追逐的热点,许多相关概念的公司都拿到了不错的融资,甚至像腾迅和 Facebook 这样的互联网巨头也在布局元宇宙。 元宇宙并不是一个新概念,其实早在1992年的时候就出现了,它是在科幻小说《雪崩》当中首次提出,它是利用科技手段进行链接与创造的,与现实世界映射和交互的虚拟世界,具备新型社会体系的数字生活空间。元宇宙本质上是对现实世界的虚拟化、数字化过程,需要对内

Web Farm和Web Garden的区别?

出处: http://www.cnblogs.com/TranslateOfYi/archive/2011/02/11/1951419.html   【译文】Web Farm和Web Garden的区别?2011-02-11 16:06        by        孙毅,           在这篇博文中,我将确切剖析Web Farm和Web Garden的区别和原理,以及使

Web Farm和Web Garden的区别

在这篇博文中,我将确切剖析Web Farm和Web Garden的区别和原理,以及使用它们的利弊。进一步地,我将介绍如何在各个版本的IIS中创建Web Garden。   英文原文 | Abhijit Jana | 2010年10月2日   概述   ASP.NET开发服务器负责处理所有来自客户端的请求和响应(开发阶段)。完成开发后,为了让他人可以访问你的站点,你必须将站点部署到服务器上,这将涉

Farm Irrigation HDU - 1198

点击打开链接 没什么道道 就是麻烦 要仔细 看每个块是什么类型 又能和什么类型的块相连 预处理一下即可   #include <bits/stdc++.h>using namespace std;struct node{int dir[4];};node per[11];int mp[100][100];int f[5000];int n,m;void init();void