题目链接:https://csacademy.com/contest/arhiva/#task/long_journey/

大意是有一张无向不带权的图,两个人同时从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 <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 #include <string>
 5 #include <cstring>
 6 #include <cstdio>
 7 #include <math.h>
 8 #include <queue>
 9 #include <stack>
10 #include <map>
11 #include <cassert>
12 #include <set>
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<int>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<<ret<<endl;
73     }
74     return 0;
75 }

View Code

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

CSAcademy Beta Round #5 Long Journey相关推荐

  1. Codeforces Beta Round #17 D. Notepad (数论 + 广义欧拉定理降幂)

    Codeforces Beta Round #17 题目链接:点击我打开题目链接 大概题意: 给你 \(b\),\(n\),\(c\). 让你求:\((b)^{n-1}*(b-1)\%c\). \(2 ...

  2. Codeforces Beta Round #5 B. Center Alignment 模拟题

    B. Center Alignment 题目连接: http://www.codeforces.com/contest/5/problem/B Description Almost every tex ...

  3. Codeforces Beta Round #75 (Div. 1 Only) B. Queue 线段树。单点更新

    http://codeforces.com/problemset/problem/91/B 题意: 给你n个数,求得i 到n中小于a[i]的最右边的a[j],然后求a[i]到a[j]之间包含了多少个数 ...

  4. Codeforces Beta Round #51 D. Beautiful numbers 数位dp + 状态优化

    传送门 文章目录 题意: 思路: 题意: 思路: 数位dpdpdp挺经典的一个题辣,有一个很明显的状态就是f[pos][num][lcm]f[pos][num][lcm]f[pos][num][lcm ...

  5. Codeforces Beta Round #22 (Div. 2 Only) E. Scheme(DFS+强连通)

    题目大意 给了 n(2<=n<=105) 个点,从每个点 u 出发连向了一个点 v(共 n 条边) 现在要求添加最少的边使得整个图是一个强连通图 做法分析 这道题千万不要一般化:先求强连通 ...

  6. codeforces beta round 1

    codeforces beta round 1 A Theatre Square in the capital city of Berland has a rectangular shape with ...

  7. Codeforces Beta Round #4 (Div. 2 Only)

    Codeforces Beta Round #4 (Div. 2 Only) A 水题 1 #include<bits/stdc++.h> 2 using namespace std; 3 ...

  8. Codeforces Beta Round #7

    Codeforces Beta Round #7 http://codeforces.com/contest/7 A 水题 1 #include<bits/stdc++.h> 2 usin ...

  9. Codeforces Beta Round #1 A,B,C

    A. Theatre Square time limit per test:1 second memory limit per test:256 megabytes input:standard in ...

  10. Codeforces Beta Round #2--B题 (DP)

    题目:The least round way 1000*1000的方阵,每个格子有一个非负整数,现在要从左上走到右下,每次只能向下或者向右走.目标是使得所有走的格子里的数的乘积里,末尾0的个数最少,要 ...

最新文章

  1. Android -- TouchDelegate
  2. python 迭代器
  3. 遇到洋妞不敢搭讪,程序员的羞涩你不懂
  4. 【机器学习】这次终于彻底理解了奇异值分解(SVD)原理及应用
  5. CodeForces 543D 树形DP Road Improvement
  6. 定期定量采购_企业常见的六种采购策略
  7. php网站开发项目实战,PHP动态网站开发项目实战
  8. 吉他谱——寂寞是因为思念谁
  9. [转载] Python 从字符串匹配相同元素的所有下标位置(两种办法解析)
  10. ConvMF论文解读
  11. c语言小程序跑马灯,小程序横向跑马灯效果(3种方式)
  12. 安全防范趋势、信息安全管理、隐私保护
  13. 数据链路层概述(主要解决的三个问题)
  14. 营业执照识别/发票识别在供应链与物流智能移动解决方案
  15. 安全狗加入天翼网信安全产业联盟 发挥云安全生态影响力
  16. C语言-初识C语言(4)
  17. Latex公式内行间距,字体大小控制
  18. android 深度自定义View
  19. 基于Matlab的静电场仿真实验--求均匀带电球壳的电场
  20. mysql_native_password_连接报错'mysql_native_password'

热门文章

  1. 微信小程序云开发教程-云函数操作数据库-排序查询、指令查询
  2. vue element 调用后台下载文件
  3. bootstraptable 数字不换行_不知道这些数据录入技巧,你就凹凸了!|Excel093
  4. 基于springboot的猫头鹰物业管理系统
  5. extjs tree下拉列表_Extjs中ComboBoxTree实现的下拉框树效果(自写)_extjs
  6. docker 中安装 docker jenkins 的安装及配置
  7. RequestContextHolder 获取 ServletRequest 和 ServletResponse,Spring MVC ModelAndView 数据响应 Response
  8. 阶段3 2.Spring_07.银行转账案例_7 代理的分析
  9. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_2 连接池介绍
  10. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_8_解决线程安全问题_Lock锁...