51nod 1535 深海探险(并查集判联通块)

2023-10-25 05:40

本文主要是介绍51nod 1535 深海探险(并查集判联通块),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1535 深海探险
题目来源:  CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40  难度:4级算法题
 收藏
 关注

很久很久以前的一天,一位美男子来到海边,海上狂风大作。美男子希望在海中找到美人鱼,但是很不幸他只找到了章鱼怪。

 

然而,在世界的另一端,人们正在积极的收集怪物的行为信息,以便研制出强大的武器来对付章鱼怪。由于地震的多发,以及恶劣的天气,使得我们的卫星不能很好的定位怪物,从而不能很好的命中目标。第一次射击的分析结果会反映在一张由n个点和m条边组成的无向图上。现在让我们来确定这张图是不是可以被认为是章鱼怪。

 

为了简单起见,我们假设章鱼怪的形状是这样,他有一个球形的身体,然后有很多触须连接在他的身上。可以表现为一张无向图,在图中可以被认为由三棵或者更多的树(代表触须)组成,这些树的根在图中处在一个环中(这个环代表球形身体)。

 

题目保证,在图中没有重复的边,也没有自环。


Input
单组测试数据
第一行给出两个数,n表示图中的点的个数,m表示图中边的数量。 (1≤ n≤100,0≤ m≤ n*(n-1)/2 )
接下来m行给出边的信息,
每一行有两上数x,y  (1≤ x,y≤ n,x≠y)
表示点x和点y之间有边相连。每一对点最多有一条边相连,点自身不会有边到自己。
Output
共一行,如果给定的图被认为是章鱼怪则输出"FHTAGN!"(没有引号),否则输出"NO"(没有引号)。
Input示例
6 6
6 3
6 4
5 1
2 5
1 4
5 4
Output示例
FHTAGN!
System Message  (题目提供者)
Visual C++的运行时限为:1000 ms ,空间限制为:131072 KB  示例及语言说明请按这里

 允许其他 AC 的用户查看此代码,分享代码才能查看别人的代码并有机会获得勋章


因为题中说明没有重边和自环,并且能组成章鱼怪的话该无向图中一定有且只有一个环,并且题中说明

章鱼怪的触须是有以环中某些点为根的树组成,因此可以得出结论,只要点数等于边数就能组成章鱼怪。

但是有一个坑点,就是给你的图并非是一个连通图,因此并查集或者搜索判断一发就OK了。

#include<set>
#include<map>   
#include<stack>          
#include<queue>          
#include<vector>  
#include<string>
#include<math.h>          
#include<stdio.h>          
#include<iostream>          
#include<string.h>          
#include<stdlib.h>  
#include<algorithm> 
#include<functional>  
using namespace std;          
#define ll long long       
#define inf  1000000000     
#define mod 1000000007           
#define maxn  208
#define lowbit(x) (x&-x)          
#define eps 1e-9
vector<int>q[maxn];
bool used[maxn];
int p[maxn];
int find(int x)
{if(p[x]==x)return x;return p[x]=find(p[x]);
}
int main(void)
{bool flag=0;int n,m,i,j,x,y;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)p[i]=i;for(i=1;i<=m;i++){scanf("%d%d",&x,&y);int t1=find(x),t2=find(y);if(t1!=t2)p[t1]=t2;}for(i=1;i<=n;i++)if(find(p[i])!=find(p[1])){flag=1;break;}if(m==n && flag==0)printf("FHTAGN!\n");else     printf("NO\n");   return 0;   
}


这篇关于51nod 1535 深海探险(并查集判联通块)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【造轮子】纯C++实现的联通组件标记算法

学习《OpenCV应用开发:入门、进阶与工程化实践》一书 做真正的OpenCV开发者,从入门到入职,一步到位! 连接组件标记算法 连接组件标记算法(connected component labeling algorithm-CCL)是图像分析中最常用的算法之一,算法的实质是扫描一幅图像的每个像素,对于像素值相同的分为相同的组(group),最终得到图像中所有的像素连通组件。扫描的方式可以是从

高级数据结构设计--并查集及实现学习笔记(有趣篇)

并查集的程序设计: 为了解释并查集的原理,我将举一个更有趣的例子。 话说江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友。而且他们信奉“朋友的朋友就是我的朋友”,只要是能通过朋友关系串联起来的,不管拐了多少个弯,都认为是自己人。这样一来,江湖上就形

【51nod】算法马拉松4 F 移数字 【快速求N!%P】【FFT】

传送门:【51nod】算法马拉松4 F 移数字 涉及知识点:多项式求逆,多项式除法,多点插值,阶乘取模。 对于N!%P,复杂度为 O(N−−√log2N−−√) O(\sqrt N \log^2\sqrt N)。 但常数巨大,和暴力算实际复杂度只相差常数= = 这个是可以扩展到组合数取模的~ my  code: my~~code: #include <stdio.h>#includ

YGG深海传奇,创造财富无限可能!

随著区块链技术的创新与游戏产业的深度融合,GameFi赛道迅速崛起,成为全球投资者与玩家瞩目的新兴领域。 成立于2020年的Yield Guild Games(YGG),作为全球区块链游戏领域的先锋公会之一,也加入到向去中心化经济模式的转型浪潮当中。 为此,YGG 决定开启新的战略布局,通过推出《深海传奇》项目,实现从传统链游公会向链游公会协议的跨越式转型。旨在构建一个更加开放、透明,并

【并查集水题】【注意连通和0 0】

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 36142    Accepted Submission(s): 11052 Problem Description 上次Gardon的迷宫城堡小希玩了

HIHO #1190 : 连通性·四(点的双联通分量)

题目链接 点的双联通分量,不注意写出了一个bug,找了2个多小时= =,我的边存的是0开始的,然后ans数组一开始也是0,然后就是if的地方。。。。。 还是tarjan的算法,结合提示,这里需要存边,然后栈里面保存的是边,而不是点,这里我用边在边集es中的编号,作为边的标志 #include<bits/stdc++.h>using namespace std;#define cl(a,b

--uva247(calling circles)强联通与floyd-warshell

图论题:一开始我是用tarjan算法做的,wrong answer 了很多次,然后又用了floyd-warshell算法,也wa了 最后找了题解,原来最后的dataset后面不是组数,是样例的编号,题根本就没说,让人怎么理解。。。 tarjan #include<stdio.h>#include<iostream>#include<string.h>#include<string>#

POJ 2762 Going from u to v or from v to u?(强联通,拓扑排序)

http://poj.org/problem?id=2762 Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 14573 Accepted: 3849 Description In order to make their sons brave, J

【深海王国】小学生都能玩的单片机!番外2:Arduino控制其他元器件

Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督为大家带来单片机的新番外系列——小学生都能玩的单片机!番外2:Arduino控制其他元器件,带你学习如何使用Arduino控制如继电器、舵机、传感器等简单电元件。 (1)Arduino控制继电器开关 之前在语音模块系列章节我们已经详细介绍了继电器,这里就不多说了

数据结构之并查集及应用

一、并查集简介 并查集是一种数据结构,用于维护一组不相交的动态集合,支持以下两种主要操作: 合并(Union):将两个集合合并成一个集合。 查找(Find):确定某个元素属于哪个集合,通常是返回集合内的一个“代表元素”。 并查集中的“集”指的是不相交的集合,即一系列没有重复元素的集合。而“并”指的是集合的并集操作,即将两个集合合并为一个集合。 二、并查集的实现 并查集主要有两种实现思路