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

输入格式:

输入第一行给出3个正整数nmk,其中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
一开始有两种想法 dfs bfs和最短路 我嫌bfs麻烦就开了最短路
因为是不能绕行的 比如1,2,3互相连
不能是1到2再到3 所以dfs行不通
这恰巧就是最短路的不断优化。。
做到最后 光荣的拿了17分 这么简单的题只拿了17分 QwQ
因为比赛的时候没时间了
提一下 这次周练时间不够 3小时6题天梯三十分的题目 我们这些弱鸡没有一个ak(我还有一题没开 其他题都是。。没怎么满分) 除了队里第一的大佬 30分钟内ak全部 蒟蒻的我怀疑人生 dijkstra : 补了并查集还是没过。。
#include<bits/stdc++.h>
using namespace std;
//input
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m);
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define N 10005
#define inf 0x3f3f3f3f
int n,m,q;
int mp[N][N];
int dis[N];
int vis[N]; int f[];
int find1(int x)
{
int j=x;
while(j!=f[j])
j=f[j];
int cur=x;
if(cur!=j)
{
int t=f[cur];
f[cur]=j;
cur=t;
}
return j;
}
void union1(int x,int y)
{
int x1=find1(x);
int y1=find1(y);
if(x1<y1)f[y1]=x1;
else f[x1]=y1;
return ;
} void dijkstra(int s)
{
memset(vis,,sizeof vis); for(int i=;i<=n;i++)
{
dis[i]=mp[s][i];
if(find1(i)!=find1(s))vis[i]=;
}
dis[s]=;
vis[s]=; for(int i=;i<=n;i++)
{
int minn=inf,u=-;
for(int j=;j<=n;j++)
if(!vis[j]&&minn>dis[j])
minn=dis[u=j];
if(u==-)return;
vis[u]=;
for(int j=;j<=n;j++)
{ if(dis[j]>dis[u]+mp[u][j])
dis[j]=dis[u]+mp[u][j]; }
}
} int main()
{
RIII(n,m,q);
for(int i=;i<=n;i++)
f[i]=i;
rep(i,,n)
rep(j,,n)
if(i==j)mp[i][j]=;
else mp[i][j]=inf; while(m--)
{
int a,b;
RII(a,b);
union1(a,b);
mp[a][b]=mp[b][a]=;
} while(q--)
{
int x;
RI(x);
dijkstra(x);
int maxx=; int flag=;
rep(i,,n)
if(dis[i]<)
if(dis[i]>maxx)maxx=dis[i],flag=i; cout<<flag<<endl;
}
return ;
}

dijkstra


赛后补了bfs  其实好简单。。
#include<bits/stdc++.h>
using namespace std;
//input
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m);
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
vector<int>mp[];
int vis[];
void bfs(int x)
{
queue<int>q;
q.push(x);
vis[x]=;
int ans=;
int flag=;
while(!q.empty())
{
int u=q.front();q.pop();
if(vis[u]>ans) ans=vis[u],flag=u;
else if(vis[u]==ans&&u<flag)flag=u;
if(mp[u].size()>=)
rep(i,,mp[u].size()-)
{
int v=mp[u][i];
if(vis[v]==-)
{
vis[v]=vis[u]+;
q.push(v);
}
}
}
printf("%d\n",flag);
} int main()
{
int n,m,q;
RIII(n,m,q);
while(m--)
{
int a,b;
RII(a,b);
mp[a].push_back(b);
mp[b].push_back(a);
}
int cnt=;
while(q--)
{
rep(i,,n)
vis[i]=-;
int x;
RI(x);
bfs(x);
}
return ;
}



喊山 BFS的更多相关文章

  1. PAT L3-008. 喊山(BFS)C4 初赛30分

    喊山(30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的. ...

  2. PAT 天梯杯 L3-008. 喊山 bfs

    L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...

  3. PAT天梯赛练习题——L3-008. 喊山(邻接表+BFS)

    L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...

  4. 【邻接矩阵+基础BFS】PAT-L3-008. 喊山

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

  5. pat 喊山

    L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出" ...

  6. PAT L3-008 喊山

    https://pintia.cn/problem-sets/994805046380707840/problems/994805050709229568 喊山,是人双手围在嘴边成喇叭状,对着远方高山 ...

  7. PAT L3-008 喊山(广搜)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ...

  8. L3-008 喊山 (30 分)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ...

  9. PTA 练习 7-24 喊山 (30 分)

    7-24 喊山 (30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的& ...

随机推荐

  1. 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)

    [BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...

  2. CRM 报表导出excel时指定sheet名

    如图所示,设置PageName即可: 这样导出excel时,sheet的名就有了:

  3. adb相关基础知识集锦

    Android单元测试adb shell am instrument -w adb shell dumpsys adb logcat介绍

  4. Docker 镜像加速器

      Docker 镜像加速器 我们使用Docker的第一步,应该是获取一个官方的镜像,例如mysql.wordpress,基于这些基础镜像我们可以开发自己个性化的应用.我们可以使用Docker命令行工 ...

  5. 枚举类型---java基础代码

    package com.mon11.day4; /** * 类说明 :定义枚举 * @author 作者 : chenyanlong * @version 创建时间:2017年11月4日 */ pub ...

  6. vue+webpack开发(三)

    上一篇博文讲了怎么使用路由,这次主要讲讲怎么编写一个vue组件 vue定义了一种“单文件组件”后缀为‘.vue’的文件,大概长这样子: <template> <div> < ...

  7. Mask-RCNN数据集制作

    转自https://blog.csdn.net/pingushen2100/article/details/80513043 一.Mask-RCNN数据集 1.1 训练Mask-RCNN用的到的文件有 ...

  8. Linux-Xshell会话保持

    1.Xshell客户端设置 2.服务端设置 修改/etc/ssh/sshd_config文件,找到 ClientAliveInterval 0和ClientAliveCountMax 3并将注释符号( ...

  9. 【DS】排序算法之选择排序(Selection Sort)

    一.算法思想 选择排序是一种简单直观的排序算法.它的工作原理如下: 1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列: 2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾 ...

  10. Spring RedisTemplate操作-ZSet操作(6)

    @Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...