大致题意:
见http://www.nocow.cn/index.php/Translate:USACO/castle
大致思路:
苦逼模拟的并查集……usaco里面的还需要输出炸哪一堵墙……崩溃>_<
/*
ID:123ldss2
PROG: castle
LANG: C++
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=100005;
int father[nMax],rank[nMax],N,M,num[nMax],sum; //rank近似树的高度。
int find(int x){ // 寻找父节点
if(x!=father[x])
return father[x]=find(father[x]);
return x;
}
void unite(int a,int b){
// cout<<a<<" unio "<<b<<endl;
int x=find(a);
int y=find(b);
if(x==y)
return ;
else{
if(rank[x]>rank[y]){
father[y]=x;
num[x]+=num[y];
}
else if(rank[x]<rank[y]){
father[x]=y;
num[y]+=num[x];
}
else{
father[x]=y;
num[y]+=num[x];
rank[y]++;
}
}
}
void set(){ // 初始化
int i;
for(i=0; i<nMax-1; i++){
father[i]=i;
rank[i]=0;
num[i]=1;
}
//n=0;
}
int map[100][100];
bool vis[nMax];
int main(){
int n,m,i,j,ans1,a,b;
// freopen ( "castle.in", "r", stdin );
// freopen ( "castle.out", "w", stdout );
while(scanf("%d%d",&n,&m)!=EOF){
set();
sum=0;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
scanf("%d",&map[i][j]);
if((map[i][j]&1)==0){
unite((i-1)*m+j,(i-1)*m+j-1);
}
if((map[i][j]&2)==0){
unite((i-1)*m+j,(i-2)*m+j);
}
if((map[i][j]&4)==0){
unite((i-1)*m+j,(i-1)*m+j+1);
}
if((map[i][j]&8)==0){
unite((i-1)*m+j,(i)*m+j);
}
}
}
ans1=0;
for(i=1;i<=n*m;i++){
j=find(i);
// cout<<"num"<<num[find(i)]<<endl;
ans1=max(ans1,num[find(i)]);
if(vis[j]==0){
vis[j]=1;
sum++;
}
}
cout<<sum<<endl;
cout<<ans1<<endl;
}
return 0;
}
分享到:
相关推荐
poj2492 A Bug's Life并查集应用的扩展,希望可以给大家带来用处
* 简单并查集的应用 * 哈希表和二分查找等高效查找法 + poj3349, poj3274, poj2151, poj1840, poj2002, poj2503 * 哈夫曼树:poj3253 * 堆 * Trie树:静态建树、动态建树 + poj2513 四、简单搜索 * 深度优先搜索...
根据给定的信息,我们可以将这些知识点分为几个大类别:数据...以上是对经典POJ分类的详细解析,通过这些知识点的学习,可以帮助我们更好地理解和掌握算法与数据结构的基础知识,并能够应用于实际问题的解决过程中。
根据给定的信息,本文将详细解释“POJ 1988 简单并查集”中的核心知识点,包括并查集的基本概念、代码实现以及在本题中的具体应用。 ### 并查集基本概念 并查集是一种用于处理一些不交集的合并及查询问题的数据...
- POJ 1068: 模拟过程演示 - POJ 2632: 模拟算法应用 - POJ 1573: 模拟策略展示 - POJ 2993: 模拟技巧实例 - POJ 2996: 模拟方法实践 ##### 2. 图论算法 - **图的基本概念**:掌握无向图、有向图、邻接矩阵、...
标题中的“图的深搜+树状数组练习 POJ 3321(JAVA)”指的是一个编程题目,其中涉及到图的深度优先搜索(DFS, Depth First Search)算法和树状数组(也称为线段树,Segment Tree)的数据结构。这个题目来源于POJ...
【标题】"POJ2092:计数排序,求第K大的元素"是一个编程题目,主要涉及计数排序算法以及如何在数组中找出第K大的元素。计数排序是一种非基于比较的排序算法,它适用于整数排序,尤其在数据范围不大的情况下效率极高。...
【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...
poj 1611 The Suspects 代码 并查集的应用
* 并查集的高级应用:例如 poj1703、poj2492。 * KMP 算法:例如 poj1961、poj2406。 4. 搜索: * 最优化剪枝和可行性剪枝。 * 搜索的技巧和优化:例如 poj3411、poj1724。 * 记忆化搜索:例如 poj3373、poj...
1. poj2524.cpp:这是一个POJ(Problem Setter's Online Judge)的编程题目,通常涉及到特定的算法问题,可能需要利用并查集解决连通性或路径查找问题。 2. hdoj1233最小生成树,克鲁斯卡尔.cpp:最小生成树是图论...
此外,它也是算法竞赛中的常见题目类型,例如POJ等在线编程平台上的题目就经常涉及并查集的使用。 综上所述,并查集是一种非常实用的数据结构,它在处理集合的连接与查找问题时具有高效性和灵活性,对于理解和掌握...
在提供的代码文件中,"POJ2965-The Pilots Brothers' refrigerator(DFS+enum).cpp" 应该是使用DFS和枚举实现的解决方案,而 "POJ2965-The Pilots Brothers' refrigerator(DFS+Bit).cpp" 是使用DFS和位运算的版本。...
【标题】"POJ1027 - The Same Game"是一个经典的编程竞赛题目,源自北京大学的在线编程平台POJ(Problem Online Judge)。该题目主要考察的是动态规划和矩阵链乘法的知识,要求参赛者编写程序解决一个具有策略性的...
- (poj1068, poj2632, poj1573, poj2993, poj2996):动态规划是一种通过分解问题为子问题,并将子问题的结果存储起来避免重复计算的方法。 ### 二、图论 1. **图的基本概念**: - 图的基本定义及其相关的术语...
- **定义**: 并查集是一种支持并运算和查询运算的数据结构。 - **应用场景**: 常用于处理不相交集合的合并及查询问题。 - **示例题目**: 无具体题目给出,但通常用于解决图的连通性、分组等问题。 ##### 4. 哈希表 ...
* 简单并查集:简单并查集是指解决问题的简单并查集算法。 * 哈希表和二分查找等高效查找法:哈希表和二分查找等高效查找法是指解决问题的高效查找算法,如 poj3349、poj3274、POJ2151、poj1840、poj2002、poj2503。...
标题中的“图的深搜+回溯练习题:POJ2197”是指一个编程题目,主要涉及图论中的深度优先搜索(DFS, Depth First Search)和回溯算法的应用。这个题目来源于在线编程竞赛平台POJ(Problem Online Judge),编号为2197...
北大POJ1163-The Triangle
这份代码用C++实现了经典算法并查集,来源于poj题目1182