PTA 练习 7-24 喊山 (30 分)
7-24 喊山 (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搜
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 7;
#define inf 0x3f3f3f3f
int ans;
struct Edge
{
    int u, v, net;
    Edge(int _u = 0, int _v = 0, int _net = 0)
    {
        u = _u, v = _v, net = _net;
    }
} e[MAXN << 1];
int cnt = -1;
int head[MAXN];
int vis[MAXN];
void add(int u, int v)
{
    e[++cnt] = Edge(u, v, head[u]);
    head[u] = cnt;
}
int maxx, maxlen;
struct node
{
    int num, len;
    node(int _num = 0, int _len = 0)
    {
        num = _num;
        len = _len;
    }
};
void bfs(int x)
{
    memset(vis, 0, sizeof(vis));
    queue<node> q;
    q.push(node(x, 0));
    vis[x] = 1;
    while (!q.empty())
    {
        node w = q.front();
        q.pop();
        for (int i = head[w.num]; ~i; i = e[i].net)
        {
            int to = e[i].v;
            if (!vis[to])
            {
                vis[to] = 1;
                node l = node(to, w.len + 1);
                if (l.len > maxlen)
                {
                    maxx = l.num;
                    maxlen = l.len;
                }
                else if (l.len == maxlen)
                    maxx = min(maxx, l.num);
                q.push(l);
            }
        }
    }
}
int main()
{
    memset(head, -1, sizeof(head));
    int n, m, k;
    scanf("%d%d%d", &n, &m, &k);
    for (int i = 0; i < m; i++)
    {
        int u, v;
        scanf("%d%d", &u, &v);
        add(u, v);
        add(v, u);
    }
    while (k--)
    {
        memset(vis, 0, sizeof(vis));
        int x;
        scanf("%d", &x);
        maxlen = 0, maxx = -1;
        bfs(x);
        if (maxx == -1)
            printf("0\n");
        else
            printf("%d\n", maxx);
    }
    return 0;
}
PTA 练习 7-24 喊山 (30 分)的更多相关文章
- 天梯赛练习 L3-008 喊山 (30分) bfs搜索
		题目分析: 本题是一题比较简单的bfs搜索题,首先由于数据给的比较多不能直接开二维数组存放,而是用了vector的动态的二维数组的形式存放,对于每个出发点,我们bfs向四周搜索,标记搜索过的点,遇到搜 ... 
- PTA 7-2 哈夫曼编码 (30分)
		PTA 7-2 哈夫曼编码 (30分) 给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长.然而哈夫曼编码并不是唯一的.例如对字符 ... 
- PTA 11-散列4 Hard Version   (30分)
		题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/680 5-18 Hashing - Hard Version (30分) Given ... 
- PTA 04-树6 Complete Binary Search Tree   (30分)
		题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/669 5-7 Complete Binary Search Tree (30分) A ... 
- PTA 逆散列问题 (30 分)(贪心)
		题目链接:https://pintia.cn/problem-sets/1107178288721649664/problems/1107178432099737614 题目大意: 给定长度为 N 的 ... 
- CCCC 喊山
		2016年天梯赛模拟&初赛题集(nwu) 编程题30小题,共计580分 580分 编程题 5-14 喊山 (30分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂…… ... 
- PAT L3-008. 喊山(BFS)C4 初赛30分
		喊山(30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的. ... 
- L3-008 喊山 (30 分)
		喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ... 
- PTA 7-1 是否完全二叉搜索树 (30分)
		PTA 7-1 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. ... 
随机推荐
- c++ 队列算法
			include using namespace std; #define Maxsize 5 typedef int DataType; typedef struct Queue { DataType ... 
- python常见关键字的使用
			常见关键字 在循环中常见的关键字使用方法 continue:结束本次循环,继续执行下一次循环 break:跳出一个循环或者结束一个循环 例 使用用户名密码登录(有三次机会)count=0while c ... 
- java agent技术原理及简单实现
			注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此 ... 
- TCP/IP||UDP广播和多播
			1.概述 广播和多播应用于UDP,TCP是一个面向连接协议,意味着分别运行与两个主机内的两进程间存在一个连接,在考虑多个主机内的共享通信网络,每个以太网帧包含源主机和目的主机以太网地址(48bit), ... 
- Java方法的参数传递是值传递还是引用传递?
			当基本数据类型(Boolean,byte,char,String,int,Long,float,double)作为参数传递时,传递的是实参值的副本,即传的是值,无论在函数中怎么操作这个副本,实参的值是 ... 
- C++版本的UnEscape 解析\uxxxx\uxxxx编码字符
			解析类似于这种Unicode编码格式的字符串 \u5b55\u5987\u88c5\u590f\u88c52018\u65b0\u6b3e\u5bbd\u677e\u77ed\u8896\u4e2d\ ... 
- 使用Theia——构建你自己的IDE
			上一篇:Theia架构 构建你自己的IDE 本指南将教你如何构建你自己的Theia应用. 必要条件 你需要安装node 10版本(译者:事实上最新的node稳定版即可): curl -o- https ... 
- JavaScript substring()
			JavaScript substring() 方法 参数 描述 start 必需.一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置. stop 可选.一个非负的整数, ... 
- 《图解机器学习-杉山将著》读书笔记---CH3
			CH3 最小二乘学习法 重点提炼 提出最小二乘学习法的缘故: 最小二乘学习法公式 对不同模型进行最小二乘法学习,得到最小二乘公式中的参数theta: 1.线性模型 代入3.1公式,对参数求偏导,偏 ... 
- static和final关键字
			static关键字 静态变量 静态变量:又称做类变量,也就是这个变量属于整个类,而不属于单个实例.类所有的实例共享静态变量,可以直接通过类名来访问它.静态变量在内存中只存在一份,当系统第一次加载类时, ... 
