7-3 喊山 (30 分)

搞了好几天心态的一道题,还是菜,原因就是想复杂了,第一次遇到了内存超限的问题,把邻接矩阵由二维数组换成了vector才过的。

7-3 喊山 (30 分)

喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。(图文摘自:http://news.xrxxw.com/newsshow-8018.html)

一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意一个发出原始信号的山头,本题请你找出这个信号最远能传达到的地方。

输入格式:
输入第一行给出3个正整数n、m和k,其中n(≤10000)是总的山头数(于是假设每个山头从1到n编号)。接下来的m行,每行给出2个不超过n的正整数,数字间用空格分开,分别代表可以听到彼此的两个山头的编号。这里保证每一对山头只被输入一次,不会有重复的关系输入。最后一行给出k(≤10)个不超过n的正整数,数字间用空格分开,代表需要查询的山头的编号。

输出格式:
依次对于输入中的每个被查询的山头,在一行中输出其发出的呼喊能够连锁传达到的最远的那个山头。注意:被输出的首先必须是被查询的个山头能连锁传到的。若这样的山头不只一个,则输出编号最小的那个。若此山头的呼喊无法传到任何其他山头,则输出0。

输入样例:

7 5 4
1 2
2 3
3 1
4 5
5 6
1 4 5 7

输出样例:

2
6
4
0

这道用的是BFS+stl,老师提倡用双向链表,有时间了再试试。

先贴一个TLE代码(有时显示内存超限)

#include <bits/stdc++.h>
using namespace std;
int Map[10001][10001];
int tar,n,L;
int Layer[10005];
int vis[10005];
int svis[10005];
void Found();
int main()
{int m,k;cin>>n>>m>>k;int a,b;for (int i=0;i<m;i++){cin>>a>>b;Map[a][b]=1;Map[a][0]++;Map[b][a]=1;Map[b][0]++;}for (int i=0;i<k;i++){cin>>tar;memset(Layer,0,sizeof(Layer));memset(vis,0,sizeof(vis));memset(svis,0,sizeof(svis));Found();               //作用是为每个节点打层数标记 if (L==1){printf("0\n");continue;}for (int j=1;j<=n;j++){if (Layer[j]==L){printf("%d\n",j);break;}}}return 0;
}void Found()
{int count=0;    //用来记录每一层的元素个数 queue<int>q;L=0;q.push(tar);vis[tar]=1;svis[tar]=1;while (!q.empty()){count=0;L++;queue<int>temp;temp=q;while (!q.empty())     //计算下一层元素个数 {if (Map[q.front()][0]==0){q.pop();break;}for (int i=1;i<=n;i++){if (Map[q.front()][i]==1&&!svis[i]){count++;svis[i]=1;}}q.pop();}q=temp;      //复活q int num=0;   //根据count开始入列 while (num<count){Layer[q.front()]=L;     //打层次标记 for (int j=1;j<=n;j++){if (num>=count) break;if (Map[q.front()][j]==1&&!vis[j]){vis[j]=1;q.push(j);num++;}}q.pop();}while (q.size()>num)   //漏掉的上层元素,原因是他没有孩子(就说是孩子吧...) {Layer[q.front()]=L;q.pop();}}
}

说一说我的思路,这道题最重要的是Found函数,即对每个元素打标记为第几层,从temp=q到复活q是计算这一层总共有几个孩子,q复活后再将孩子入队,为栈顶元素打标记,这样出现了问题,有可能有的元素还没将关联元素(注释是孩子)入队,循环就结束了,实际上他应该是L层,但是如果不及时处理就会成为L+1层,这是不对的,因此while (q.size()>num)循环处理。

下面是AC代码

#include <bits/stdc++.h>
#include <queue>
using namespace std;
vector<int>Map[10001];
int sum[10001];
int vis[10001];
int tar,n,Max;
void Found();
int main()
{int m,k,a,b;cin>>n>>m>>k;for (int i=0;i<m;i++){cin>>a>>b;Map[a].push_back(b);Map[b].push_back(a);}for (int i=0;i<k;i++){cin>>tar;memset(sum,0,sizeof(sum));memset(vis,0,sizeof(vis));Found();for (int j=1;j<=n;j++){if (sum[j]==Max&&Max!=1){cout<<j<<endl;break;}else if (sum[j]==Max&&Max==1){printf("0\n");break;}}}
}void Found()
{queue<int>q;q.push(tar);sum[tar]++;Max=1;vis[tar]=1;while (!q.empty()){int topp=q.front();for (int i=0;i<Map[topp].size();i++){int ss=Map[topp][i];if (vis[ss]==0){vis[ss]=1;q.push(ss);sum[ss]=sum[topp]+1;if (sum[ss]>Max) Max=sum[ss];}}q.pop();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

章鱼有9个大脑能编辑基因,智商高到无法理解,为何没发展出文明

来源&#xff1a;科学杂志按照进化论的观点&#xff0c;生物演化出脊椎&#xff0c;是发展出更高智商的敲门砖。因为脊椎让生物体内的神经高度集中&#xff0c;反应速度明显加快&#xff0c;并且还有利于大脑向更加高级的结构演化。事实也确实如此&#xff0c;如果盘点世界上最…

Python运算符与编码

while循环 1.基本循环while 条件: 循环体如果条件为真&#xff0c;那么循环则执行如果条件为假&#xff0c;那么循环不执行 while循环代码体现形式while 3>2:print(在人间) num 1  while num<101:  print(num)  num num 1 break 终止  continue 跳出本次循环,…

Windows坐标系统

坐标映射方式是设备环境中的一个重要属性&#xff0c;默认值为MM_TEXT&#xff0c;即左上角为原点&#xff0c;右方为x轴正方向&#xff0c;下方为y轴正方向&#xff0c;这种坐标系使用的单位是像素&#xff0c;其好处是窗口中的每一点的坐标不会因为窗口大小而改变。 映射方法…

7-1 公路村村通 (30 分)

现有村落间道路的统计数据表中&#xff0c;列出了有可能建设成标准公路的若干条道路的成本&#xff0c;求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N&#xff08;≤1000&#xff09;和候选道路数目M&#xff08;≤3N&#xff09;&#…

华为徐文伟:用数学和系统工程方法推进未来网络研究

来源&#xff1a;华为在2021第五届未来网络发展大会上&#xff0c;来自产业界、学术界、研究机构等领域的专家、行业领袖&#xff0c;围绕网络操作系统、6G通信、网络安全、工业互联网等热点话题&#xff0c;共同探讨新型网络技术的攻关与变革。华为董事、战略研究院院长徐文伟…

Windows框架

#include<Windows.h> #include<tchar.h> #include"resource.h" //全局变量 LPSTR g_MainFrame "主框架"; LPSTR g_ClientFrame "客户区框架"; LPSTR g_ChildFrame[] { "子框架1","子框架2" }; LRESULT CALL…

7-4 最短工期 (25 分)

参考链接&#xff1a;https://blog.csdn.net/tianwei0822/article/details/88642441 一个项目由若干个任务组成&#xff0c;任务之间有先后依赖顺序。项目经理需要设置一系列里程碑&#xff0c;在每个里程碑节点处检查任务的完成情况&#xff0c;并启动后续的任务。现给定一个…

对我国6G早期研究布局的几点建议

来源&#xff1a;赛迪智库众所周知&#xff0c;5G网络技术无法满足2030年及未来的移动通信需求。第六代无线移动通信网络&#xff08;6G&#xff09;将引入全球覆盖、高频谱效率和能源效率、高智能性和安全性等新的性能指标和用例等&#xff0c;以解决快速增长的通信需求。虽然…

springmvc中@RequestMapping的使用

通过RequestMapping注解可以定义不同的处理器映射规则。 1.1 URL路径映射 RequestMapping(value"/item")或RequestMapping("/item")。 value的秩是数组&#xff0c;可以将多个url映射到同一个方法。 1.2 窄化请求映射 在class上添加RequestMapping(url)指定…

7-2 城市间紧急救援 (25 分)

作为一个城市的应急救援队伍的负责人&#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&#xff0c;你的任务是带领你的…

Win32 多文档多视图

#include<Windows.h> #include<tchar.h> #include"resource.h" //全局变量 LPSTR g_MainFrame "主框架"; LPSTR g_ClientFrame "客户区框架"; LPSTR g_ChildFrame[] { "子框架1","子框架2" }; //主窗口和子…

【前沿技术】严重事故!实习生删除字节跳动所有轻量级机器学习模型

来源&#xff1a;智能研究院昨晚脉脉上有网友爆料&#xff0c;字节跳动一位实习生删除了公司所有轻量级别的机器学习模型&#xff01;什么是lite模型&#xff1f;该楼主表示&#xff0c;lite模型就是公司内几乎所有GB大小以下的机器学习模型&#xff0c;且全部被删除了&#xf…

7-1 是否同一棵二叉搜索树 (30分)

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而&#xff0c;一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树&#xff0c;都得到一样的结果。于是对于输入的各种插入序列&#xff0c;你需要判断它们…

Linux基础命令---文本显示od

od 将指定文件的内容以八进制、十进制、十六进制等编码方式显示。此命令的适用范围&#xff1a;RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。 1、语法 od [选项] file od [-abcdfilosx]... [FILE] [[]OFFSET[.][b]] od --traditional [OPTION]... [FILE] [[]OF…

MFC TabCtrl用法

基于对话框的MFC程序, 在主对话框中添加TabCtrl控件,CTabCtrl 类型的变量m_tabctrl; 插入3对话框&#xff0c;并设置属性styleChild,BorderNone,创建三个对话框类CDialog1&#xff0c;CDialog2&#xff0c;CDialog3&#xff1b;在主对话框中创建三个对话框类的全局对象 m_dg1,m…

机器人行业研究报告:智能化造就新时代,自动化生产成刚需

来源&#xff1a;东莞证券作者&#xff1a;黄秀瑜核心观点智能转型时代&#xff0c;机器人前景可期。智能化时代到来&#xff0c;工业机器人和服务 机器人逐渐普及。疫情后制造业走出低迷&#xff0c;中国工业机器人月产量创新 高。全球老龄化问题日益严重&#xff0c;中国作为…

7-2 是否完全二叉搜索树 (30分)

将一系列给定数字顺序插入一个初始为空的二叉搜索树&#xff08;定义为左子树键值大&#xff0c;右子树键值小&#xff09;&#xff0c;你需要判断最后的树是否一棵完全二叉树&#xff0c;并且给出其层序遍历的结果。 输入格式&#xff1a; 输入第一行给出一个不超过20的正整数…

bzoj 1596 电话网络

Description Farmer John决定为他的所有奶牛都配备手机&#xff0c;以此鼓励她们互相交流。不过&#xff0c;为此FJ必须在奶牛们居住的N(1 < N < 10,000)块草地中选一些建上无线电通讯塔&#xff0c;来保证任意两块草地间都存在手机信号。所有的N块草地按1..N 顺次编号。…

读取BMP格式数据

#pragma once #include<afx.h> class DigitalImage { private: //指针数据类型&#xff0c;需要动态分配数据大小&#xff0c;并初始化数据 char m_FileName[100]; //文件头 LPBITMAPFILEHEADER m_lpBitmapFileHender; //除位图文件头的所有数据 LPBYTE…

指甲盖大小塞了500亿晶体管!领先台积电,IBM打造世界首款2纳米芯片!能耗仅为7纳米的1/4!...

文章来源&#xff1a;EETOP我们知道在2014年IBM已将其Microelectronics部门出售给GlobalFoundries时&#xff0c;IBM就已经宣告退出芯片代工业务。但这几年来&#xff0c;尽管IBM退出了代工业务&#xff0c;不过好像IBM在半导体先进工艺研发上一直没有放弃&#xff0c;时不时会…