博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSAcademy Beta Round #5 Long Journey
阅读量:4491 次
发布时间:2019-06-08

本文共 1677 字,大约阅读时间需要 5 分钟。

题目链接:

大意是有一张无向不带权的图,两个人同时从s点出发,分别前往a点和b点,且每个人应该走s到a和s到b的最短路,问他们可以一起走的最大距离是多少。

我一开始的想法是以s为源点bfs,做出所有点的前驱,然后判断a回到s和b回到s有多少点是共享的。WA了,后来一想,这么做确实是错的,因为很有可能a回到s的路是一条b不会走的路。然后变了下思路,直接分别以s,a和b为源点bfs,做出三个dis数组,枚举图中所有点,判断是否在s到a以及s到b的最短路上,如果是的话,则更新答案。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 using namespace std;14 15 16 const int N=323456;17 18 struct Edge {19 int to,next;20 Edge() {}21 Edge(int _to,int _next):to(_to),next(_next) {}22 } edge[N<<2];23 int idx=1,head[N];24 inline void addedge(int u,int v) {25 edge[++idx]=Edge(v,head[u]);26 head[u]=idx;27 }28 bool vis[N];29 30 void bfs(int s,int *dis) {31 memset(vis,false,sizeof vis);32 queue
que;33 que.push(s);34 vis[s]=true;35 dis[s]=0;36 while (!que.empty()) {37 int u=que.front();38 que.pop();39 for (int k=head[u];k;k=edge[k].next) {40 int v=edge[k].to;41 if (vis[v]) continue;42 dis[v]=dis[u]+1;43 vis[v]=true;44 que.push(v);45 }46 }47 }48 int dis[3][N];49 int main () {50 int n,m;51 while (scanf("%d %d",&n,&m)==2) {52 int s,a,b;53 scanf("%d %d %d",&s,&a,&b);54 idx=1;memset(head,0,sizeof head);55 for (int i=1;i<=m;i++) {56 int u,v;57 scanf("%d %d",&u,&v);58 addedge(u,v);59 addedge(v,u);60 }61 bfs(s,dis[0]);62 bfs(a,dis[1]);63 bfs(b,dis[2]);64 int da=dis[0][a];65 int db=dis[0][b];66 int ret=0;67 for (int i=1;i<=n;i++) {68 if (dis[0][i]+dis[1][i]==da&&dis[0][i]+dis[2][i]==db) {69 ret=max(ret,dis[0][i]);70 }71 }72 cout<
<
View Code

 

转载于:https://www.cnblogs.com/micrari/p/5478169.html

你可能感兴趣的文章
BZOJ1798: [Ahoi2009]Seq 维护序列seq
查看>>
PS--人物黄金色调
查看>>
开启ucosii的移植之旅
查看>>
推荐一款能写原创诗词的小程序
查看>>
Codeforces Round #496 (Div. 3) ABCDE1
查看>>
Bundle display name 与 Bundle name 的区别
查看>>
020 RDD的理解
查看>>
Vector
查看>>
为什么要应用编排,应用编排能做什么?
查看>>
实习生招聘笔试
查看>>
Linux忘记root登录密码解决方法
查看>>
String类的常用方法
查看>>
week 13 java——网络
查看>>
python curl实现
查看>>
C/C++ http协议加载sessionID
查看>>
个人应用开发详记. (二)
查看>>
一款由css3和jquery实现的卡面折叠式菜单
查看>>
uva 10791
查看>>
openlayers 4快速渲染管网模型数据
查看>>
MySQL相关小技巧
查看>>