题目链接:http://codeforces.com/gym/101149/problem/L

题目大意:有n个点(其实是n+1个点,因为编号是0~n),m条有向边。起点是0,到a和b两个节点,所经过的最少的节点的数目是多少?(a和b也算,0不算)

思路:

真的是想了半天了,不知道怎么做,虽然知道是最短路,还是偏离了方向。最后万不得已的翻了题解。

题解看的是这个人的:链接

思路大体就是:

因为如果要到两个点,路径上的点肯定是有相交点的(因为0是必然要走的)。然后如果两者路径相交,肯定选择共同相交的走。所以说,两条路径的刚开始是必然相交的,到后来才会分开。

所以我们就只需要求出distance,然后o->c + a->c + b->c的距离就好了

//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker,"/STACK:102400000,102400000")
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const int maxn = 2e5 + ;
const int inf = 0x3f3f3f3f;
int n, m, a, b;
vector<int> G[maxn];
pair<int, int> edges[maxn];
struct Point{
int u, dis;
bool operator < (const Point &rhs) const{
return dis > rhs.dis;
}
};
int d1[maxn], d2[maxn], d3[maxn]; void dijstra(int s, int d[]){
for (int i = ; i <= n; i++) d[i] = ;
d[s] = ;
priority_queue<Point> que;
que.push(Point{s, d[s]});
while (!que.empty()){
int u = que.top().u; que.pop();
for (int i = ; i < G[u].size(); i++){
int v = G[u][i];
if (d[v] > d[u] + ){
d[v] = d[u] + ;
que.push(Point{v, d[v]});
}
}
}
} int main(){
scanf("%d%d%d%d", &n, &m, &a, &b);
for (int i = ; i <= m; i++){
int u, v; scanf("%d%d", &u, &v);
edges[i] = mk(u, v);
G[u].pb(v);
}
dijstra(, d1);
for (int i = ; i <= n; i++){
G[i].clear();
}
for (int i = ; i <= m; i++){
int u = edges[i].se, v = edges[i].fi;
G[u].pb(v);
}
dijstra(a, d2);
dijstra(b, d3);
int ans = ;
for (int i = ; i <= n; i++){
ans = min(ans, d1[i] + d2[i] + d3[i]);
}
cout << ans << endl;
return ;
}

最短路+找规律 Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest L. Right Build的更多相关文章

  1. 最小割 D. Behind the Wall Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest

    题目链接:http://codeforces.com/gym/101149/problem/D 题目大意: 堡垒受到攻击.堡垒是n*m的矩阵,矩阵里刚开始都是平地,然后那个数值表示在当前平地上建一面墙 ...

  2. 贪心+离散化+线段树上二分。。。 Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest G. Of Zorcs and Axes

    题目链接:http://codeforces.com/gym/101149/problem/G 题目大意:给你n对数字,为(a[i], b[i]),给你m对数字,为(w[i], c[i]).给n对数字 ...

  3. 几何+思维 Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest K. Revenge of the Dragon

    题目链接:http://codeforces.com/gym/101149/problem/K 题目大意: 给你两个点a,b.一个人在a点,一个人在b点,b点的人要追杀a的点,他的跑步速度是a的两倍. ...

  4. ACM ICPC 2016–2017, NEERC, Northern Subregional Contest Problem J. Java2016

    题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个数字c 用 " ...

  5. 训练报告 (2014-2015) 2014, Samara SAU ACM ICPC Quarterfinal Qualification Contest

    Solved A Gym 100488A Yet Another Goat in the Garden   B Gym 100488B Impossible to Guess Solved C Gym ...

  6. Samara SAU ACM ICPC 2013-2014 Quarterfinal Qualification Contest

    A: 简单题,因为题目中说了不会有数据相同: #include<cstdio> #include<algorithm> #define maxn 200005 using na ...

  7. [刷题]ACM/ICPC 2016北京赛站网络赛 第1题 第3题

    第一次玩ACM...有点小紧张小兴奋.这题目好难啊,只是网赛就这么难...只把最简单的两题做出来了. 题目1: 代码: //#define _ACM_ #include<iostream> ...

  8. 【找规律】计蒜客17118 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E. Maximum Flow

    题意:一张有n个点的图,结点被编号为0~n-1,i往所有编号比它大的点j连边,权值为i xor j.给你n,问你最大流. 打个表,别忘了把相邻两项的差打出来,你会发现神奇的规律……你会发现每个答案都是 ...

  9. Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009) A. Trick or Treat (三分)

    题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...

随机推荐

  1. 冲刺ing-4

    第四次Scrum冲刺 队员完成的任务 队员 完成任务 吴伟华 Leangoo的看板截图,燃尽图 蔺皓雯 编写博客,学习后端设计 蔡晨旸 学习后端设计 曾茜 后端设计 鲁婧楠 服务器建构 杨池宇 学习后 ...

  2. 求1到N(正整数)之间1出现的个数

    一.题目要求 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5 ...

  3. Lucene 分词

    在Lucene中很多数据是通过Attribute进行存储的 步骤是同过TokenStrem获取文本信息流 TokenStream stream = a.tokenStream("conten ...

  4. PAT 甲级 1077 Kuchiguse

    https://pintia.cn/problem-sets/994805342720868352/problems/994805390896644096 The Japanese language ...

  5. 78W的数据使用forall 进行批量转移;

    create or replace procedure test_forall(CURRENTPAGE number ) as .--CURRENTPAGE number :=2 ; .PAGESIZ ...

  6. Delphi DbGridEh实现表格没有内容的渐变效果

    OptionsEh = dghExtendVertLines  就会有这个效果, 去掉就会没有这个效果

  7. day 03 字符串 for 循环

    1.有变量量name = "aleX leNb" 完成如下操作: 1)移除 name 变量量对应的值两边的空格,并输出处理理结果 name = "aleX leNb&qu ...

  8. [二]SpringBoot 之 简单的接口

    (1)编写一个实体类Demo package me.shijunjie.entity; public class Demo { private long id; private String name ...

  9. BZOJ4883 棋盘上的守卫(环套树+最小生成树)

    容易想到网络流之类的东西,虽然范围看起来不太可做,不过这提供了一种想法,即将行列分别看做点.那么我们需要找一种连n+m条边的方案,使得可以从每条边中选一个点以覆盖所有点.显然每个点至少要连一条边.于是 ...

  10. 关于qt中的tr()函数

    关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际化的 ...