51 Nod 1535 深海探险

2023-10-25 05:41
文章标签 51 1535 深海 nod 探险

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

                             1535 深海探险

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

 

然而,在世界的另一端,人们正在积极的收集怪物的行为信息,以便研制出强大的武器来对付章鱼怪。由于地震的多发,以及恶劣的天气,使得我们的卫星不能很好的定位怪物,从而不能很好的命中目标。第一次射击的分析结果会反映在一张由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!

思路: 图中只有一个环 所以满足条件的图 一定是基环树
    也就是一棵树上多了一条边 所以一定有 n==m 对于 n!=m 的情况一定不成立
   当 n==m 的时候 也要DFS判断一下 图是否连通

   还有一种做法是用 并查集
    对于一条边的两个点 如果已经在 一个集合中了 那么一定存在一个环 而且这样的边一定只有一条
    最后判断一下连通性
 1 #include <cctype>
 2 #include <cstdio>
 3 #include <vector>
 4 #define min(a,b) a<b?a:b
 5 
 6 const int MAXN=110;
 7 
 8 int n,m;
 9 
10 bool dfn[MAXN];
11 
12 std::vector<int> Graph[MAXN];
13 
14 inline void read(int&x) {
15     int f=1;register char c=getchar();
16     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
17     for(;isdigit(c);x=x*10+c-48,c=getchar());
18     x=x*f;
19 }
20 
21 void DFS(int u) {
22     dfn[u]=true;
23     for(int i=0; i<Graph[u].size(); ++i) {
24         int v=Graph[u][i];
25         if(!dfn[v]) DFS(v);
26     }
27 }
28 
29 int hh() {
30     read(n);read(m);
31     
32     for(int x,y,i=1; i<=m; ++i) {
33         read(x);read(y);
34         Graph[x].push_back(y);
35         Graph[y].push_back(x);
36     }
37     
38     if(n!=m) {
39         printf("NO\n");
40         return 0;
41     }
42     
43     DFS(1);
44     
45     for(int i=1; i<=n; ++i)
46       if(!dfn[i]) {
47         printf("NO\n");
48         return 0;
49       }
50     printf("FHTAGN!\n");
51     
52     return 0;
53 }
54 
55 int sb=hh();
56 int main(int argc,char**argv) {;}
DFS
 1 #include <cctype>
 2 #include <cstdio>
 3 #include <vector>
 4 #define min(a,b) a<b?a:b
 5 
 6 const int MAXN=110;
 7 
 8 int n,m,cnt;
 9 
10 int fa[MAXN];
11 
12 std::vector<int> Graph[MAXN];
13 
14 inline void read(int&x) {
15     int f=1;register char c=getchar();
16     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
17     for(;isdigit(c);x=x*10+c-48,c=getchar());
18     x=x*f;
19 }
20 
21 int find(int x) {
22     if(x==fa[x]) return x;
23     return fa[x]=find(fa[x]);
24 }
25 
26 int hh() {
27     read(n);read(m);
28     
29     for(int i=1; i<=n; ++i) fa[i]=i;
30     for(int x,y,i=1; i<=m; ++i) {
31         read(x);read(y);
32         if(find(x)==find(y)) ++cnt;
33         else {
34             int xx=find(x);
35             int yy=find(y);
36             fa[xx]=yy;
37         }
38     }
39     
40     int root=0;
41     for(int i=1; i<=n; ++i) if(fa[i]==i) ++root;
42     if(cnt==1 && root==1) printf("FHTAGN!\n");
43     else printf("NO\n");
44     
45     return 0;
46 }
47 
48 int sb=hh();
49 int main(int argc,char**argv) {;}
并查集

 

 

转载于:https://www.cnblogs.com/whistle13326/p/7732341.html

这篇关于51 Nod 1535 深海探险的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

基于51单片机的智能小车转向控制系统设计与实现

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场,电磁场与永磁体相互作用,从而使金属膜产生震动而发声。为使金属膜持续震动,蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路,这种蜂鸣器叫做有源蜂鸣器(Active Buzzer,自激式蜂鸣器);而有些则不带震荡驱动电路,这种蜂鸣器叫做无源蜂鸣器(Passive Buzzer,它激式蜂鸣器)。 1.原理图 2.软件实现 Int_B

KEIL中编译51程序 算法计算异常的疑问

KEIL开发 51 单片机程序 算法处理过程中遇到的问题 ...... by 矜辰所致 前言 因为产品的更新换代, 把所有温湿度传感器都换成 SHT40 ,替换以前的 SHT21。在 STM32 系列产品上的替换都正常,但是在一块 51 内核的无线产品上面,数据莫名其妙的总会遇到异常的情况,弯弯绕绕了好一阵子,最后才发现是程序在执行一个不算复杂的算法的时候会出错。 那么本文的目的就是说明

基于51单片机的倒计时装置proteus仿真

地址: https://pan.baidu.com/s/1p9xDKXaulyx-PyP6dURp-g 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectronics)公司生产的一系列单片机之一。它基于8051内核,并具有许多与其兼容的特性。 主要特点如下:

SQL必知必会51题

※食用指南:文章内容为牛客网《SQL必知必会》51道题重点笔记,用于重复思考错题,加深印象。 本文章涉及题目也是《SQL必知必会》书中“挑战题”,题目及答案:《SQL必知必会》随书习题答案 练习传送门:SQL必知必会51题 目录: SQL72 检索并列出已订购产品的清单 SQL78 检索产品名称和描述(四) SQL81 顾客登录名 SQL86 返回每个订单号各有多少行数 SQL

51单片机-DS1302(RTC时钟显示,代码内改变,内设的24年9月5日,上午11:12:00)

一、DS1302时序及命令字 两个操作:写操作和读操作 写操作:        (由我们单片机一个控制引脚控制DS1302的IO口写入)首先就是通过时序图把我们的命令字写入,命令字是控制我们对应要写入的年月日,时分秒等配置的关键寄存器,只有设置好命令字相关参数才能写入相关的年月日等时间信息,一个写时序共2个字节,第一个字节是我们的命令字,第二个字节是我们要写入的数据(此数据为16进制写入,最