L. Right Build
time limit per test

2.0 s

memory limit per test

256 MB

input

standard input

output

standard output

In a MMORPG «Path of Exile» characters grow by acquiring talents for special talent points received in a game process. Talents can depend on others. A talent can be acquired only if a character has at least one of the talents it depends on. Acquiring one talent costs one talent point. At the beginning of the game a character has a single starting talent.

Schoolboy Vasiliy decided to record a video manual how to level-up a character in a proper way, following which makes defeating other players and NPCs very easy. He numbered all  talents as integers from 0 to n, so that the starting talent is numbered as 0. Vasiliy thinks that the only right build is acquiring two different talents a and b as quickly as possible because these talents are imbalanced and much stronger than any others. Vasiliy is lost in thought what minimal number of talent points is sufficient to acquire these talents from the start of the game.

Input

The first line contains four space-separated integers: nma and b (2 ≤ n, m ≤ 2·105, 1 ≤ a, b ≤ na ≠ b) — the total number of talents, excluding the starting talent, the number of dependencies between talents, and the numbers of talents that must be acquired.

Each of the next m lines contains two space-separated integers: xj and yj (0 ≤ xj ≤ n, 1 ≤ yj ≤ nxj ≠ yj), which means the talent yjdepends on the talent xj. It's guaranteed that it's possible to acquire all  talents given the infinite number of talent points.

Output

Output a single integer — the minimal number of talent points sufficient to acquire talents a and b.

Examples
input

Copy
6 8 4 6
0 1
0 2
1 2
1 5
2 3
2 4
3 6
5 6
output

Copy
4
input

Copy
4 6 3 4
0 1
0 2
1 3
2 4
3 4
4 3
output

Copy
3

【题意】

给出一个n个点m条边的有向连通图每次只有起点可以用终点才可以用,初始时0点可以用,问最少要用多少点才能用到a点和b点

【分析】

如果只是要用一个点a,那么求0->a的最短路即可,但是要用两个点就可能0->a和0->b都不是最短路,但是由于路径重叠很多点可以被用两次以节省用的点数,但是注意到两条路径只会是开始时重叠在一次,之后分开就再也不会相交,因为如果再次相交不如之前全部重叠更优,那么我们枚举这个叉点c,求出0->c,a->c,b->c的最短路来更新最优解即可

【代码】

#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=2e5+5;
typedef long long ll;
#define pir pair<int,int>
#define m(s) memset(s,0,sizeof s);
int n,m,a,b,dis[3][N];
struct node{int v,w,next;}e[N<<2];int tot,head[N];bool vis[N];
struct data{int x,y,z;}ed[N];
inline void add(int x,int y,int z){
e[++tot].v=y;e[tot].w=z;e[tot].next=head[x];head[x]=tot;
}
inline void Init(){
scanf("%d%d%d%d",&n,&m,&a,&b);
for(int i=1;i<=m;i++) scanf("%d%d",&ed[i].x,&ed[i].y),add(ed[i].x+1,ed[i].y+1,1);
memset(dis[0],0x3f,sizeof dis[0]);
}
#define mp make_pair
inline void dijkstra(int S,int t){
priority_queue<pir,vector<pir>,greater<pir> >q;
q.push(mp(dis[t][S]=0,S));
while(!q.empty()){
pir p=q.top();q.pop();
int x=p.second;
if(vis[x]) continue;
vis[x]=1;
for(int i=head[x];i;i=e[i].next){
int v=e[i].v;
if(!vis[v]&&dis[t][v]>dis[t][x]+e[i].w){
q.push(mp(dis[t][v]=dis[t][x]+e[i].w,v));
}
}
}
}
inline void out(int x){
for(int i=1;i<=n+1;i++) printf("%12d",dis[x][i]);puts("");
}
inline void Solve(){
dijkstra(1,0);
tot=0;m(head);
for(int i=1;i<=m;i++) add(ed[i].y+1,ed[i].x+1,1);
m(vis);memset(dis[1],0x3f,sizeof dis[1]);
dijkstra(++a,1);
m(vis);memset(dis[2],0x3f,sizeof dis[2]);
dijkstra(++b,2);
int ans=2e9;
for(int i=1;i<=n+1;i++) ans=(int)min((ll)ans,(ll)dis[0][i]+dis[1][i]+dis[2][i]);
printf("%d",ans);
}
int main(){
Init();
Solve();
return 0;
}

Gym 101149L Right Build的更多相关文章

  1. Fastlane- app自动编译、打包多个版本、上传到app store

    Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包.发布等工作,可以节省大量的时间. Github:https://github.com/fastlane/fa ...

  2. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  3. Codeforces Gym 100803F There is No Alternative 暴力Kruskal

    There is No Alternative 题目连接: http://codeforces.com/gym/100803/attachments Description ICPC (Isles o ...

  4. Codeforces Gym 100500F Problem F. Door Lock 二分

    Problem F. Door LockTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/at ...

  5. Codeforces Gym 100513F F. Ilya Muromets 线段树

    F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...

  6. Codeforces Gym 100002 E "Evacuation Plan" 费用流

    "Evacuation Plan" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...

  7. Codeforces Gym 100002 C "Cricket Field" 暴力

    "Cricket Field" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1000 ...

  8. How to Build a New Habit: This is Your Strategy Guide

    How to Build a New Habit: This is Your Strategy Guide by James ClearRead this on JamesClear.com Acco ...

  9. Gym 101915

    Gym - 101915A  Printing Books 题意:有一本书,从第X页开始,一共用了n位数字,求此书一共多少页.99就是两位数字,100就是三位数字. 思路:直接模拟即可,我用了一个hi ...

随机推荐

  1. SharePoint 多行文本字段设置默认值

    前言 最近有这样一个需求,创建一个表单,里面有多行文本字段,但是要求内容默认带一个表格,这样用户新建项目的时候,就可以直接填表格了. 好吧,这样的需求我们可以通过JavaScript实现. 1.默认的 ...

  2. Java8 利用Lambda处理List集合循环给另外一个List赋值过滤处理

    1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ...

  3. IntentService 服务 工作线程 stopself MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. yum离线安装rpm包

    CentOS利用yum下载好rpm包,并离线安装   1.联网安装好rpm包,并将下载好的包备好 #yum install --downloadonly --downloaddir=/home/sam ...

  5. cocos2d-x 开发用到的工具

    1.VertexHelper 可用于多边形顶点的计算,可视化定点编辑器,用它创建的顶点信息可以直接导出为Box2D可使用的代码 https://github.com/jfahrenkrug/Verte ...

  6. framework中编译anroid工程并在模拟器上运行

    1.在eclipse下创建android工程Hello并拷贝到“源码目录/packages/experimental”下面   2.在Hello工程目录下面创建Android.mk文件,内容如下: L ...

  7. SQL语句调优三板斧

    改装有顺序------常开的爱车下手 你的系统中有成千上万的语句,那么优化语句从何入手呢 ? 当然是系统中运行最频繁,最核心的语句了.废话不多说,上例子: 这是一天的语句执行情况,里面柱状图表示的是对 ...

  8. 【Sqlserver】SqlServer中EXEC 与 SP_EXECUTESQL的 区别

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方式的用法. 先建立一个表,并添加一些数据来进行演示: CREATE TABL ...

  9. Main.storyboard: WKWebView before iOS 11.0 (NSCoding support was broken in previous versions)

    在工程里用  故事板写了 wkwebview  如果运行在 ios11以下 就会报这个错误,如果要支持iOS 11 以下的用户,请重写View部分,使用代码调用WKWebView,而不用使用故事版来加 ...

  10. 解决ScrollView嵌套RecyclerView的显示及滑动问题

        项目中时常需要实现在ScrollView中嵌入一个或多个RecyclerView.这一做法通常会导致如下几个问题 页面滑动卡顿 ScrollView高度显示不正常 RecyclerView内容 ...