Gym 101149L Right Build
2.0 s
256 MB
standard input
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.
The first line contains four space-separated integers: n, m, a and b (2 ≤ n, m ≤ 2·105, 1 ≤ a, b ≤ n, a ≠ 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 ≤ n, xj ≠ 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 a single integer — the minimal number of talent points sufficient to acquire talents a and b.
6 8 4 6
0 1
0 2
1 2
1 5
2 3
2 4
3 6
5 6
4
4 6 3 4
0 1
0 2
1 3
2 4
3 4
4 3
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的更多相关文章
- Fastlane- app自动编译、打包多个版本、上传到app store
Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包.发布等工作,可以节省大量的时间. Github:https://github.com/fastlane/fa ...
- ACM: Gym 101047K Training with Phuket's larvae - 思维题
Gym 101047K Training with Phuket's larvae Time Limit:2000MS Memory Limit:65536KB 64bit IO F ...
- Codeforces Gym 100803F There is No Alternative 暴力Kruskal
There is No Alternative 题目连接: http://codeforces.com/gym/100803/attachments Description ICPC (Isles o ...
- Codeforces Gym 100500F Problem F. Door Lock 二分
Problem F. Door LockTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/at ...
- Codeforces Gym 100513F F. Ilya Muromets 线段树
F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...
- Codeforces Gym 100002 E "Evacuation Plan" 费用流
"Evacuation Plan" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...
- Codeforces Gym 100002 C "Cricket Field" 暴力
"Cricket Field" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1000 ...
- 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 ...
- Gym 101915
Gym - 101915A Printing Books 题意:有一本书,从第X页开始,一共用了n位数字,求此书一共多少页.99就是两位数字,100就是三位数字. 思路:直接模拟即可,我用了一个hi ...
随机推荐
- 根据请求号(request ID)查找正在运行的sql
--下面的SQL可以根据Request ID找到对应的Session信息: select * from v$session where paddr in (select addr from v$pro ...
- [Android Pro] 完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
原文:https://blog.csdn.net/qq_24118527/article/details/82867864
- PL/SQL中复制中文再粘贴出现乱码问题的解决【转】
前不久!我对我的windowsxp做了一番大规模的设置:包括区域.系统.网络等方面的,结果当我设置完成以后,发现如果我从一些软件上复制内容到记事本里面会出现乱码,而且如果复制到word里面也不能够正常 ...
- iOS开发-模板方法模式
模板方法模式定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤.模板方法模式是由子类决定实现算法中的步骤,工厂方法由子类决定实现哪一 ...
- 推荐10本C#编程的最佳书籍
C#和.NET非常受全球开发人员的追捧和热爱.书籍是人类进步的阶梯.想要学习C# ?这里有10本学习C#编程的最好书籍在等着你哦. 1.<C# 5.0 in a Nutshell>:权威的 ...
- windows下php7.1安装redis扩展以及redis测试使用全过程(转)
最近做项目,需要用到redis相关知识.在Linux下,redis扩展安装起来很容易,但windows下还是会出问题的.因此,特此记下自己实践安装的整个过程,以方便后来人. 一,php中redis扩展 ...
- iSpy免费的开源视频监控平台
iSpy包括英文,Deutsch,Español,Française,Italiano和中文的翻译 iSpy是我们免费的开源视频监控平台.iSpy作为安装的Windows应用程序运行,具有完整的本地用 ...
- sublime text3中文文件名显示为框框,怎么解决
点击Preferences选项——settings { "font_size": 20, "ignored_packages": [ ...
- Wordpress无法连接Mysql8的问题
安装了mysql 8.0.11 之后本地可以登录,但是远程第三方工具无法连接,本地安装的Wordpress在初始化时也连接失败.防火墙已经放通的, 解决之道: 首先登陆到mysql命令行: mysql ...
- 格雷码(Gray code)仿真
作者:桂. 时间:2018-05-12 16:25:02 链接:http://www.cnblogs.com/xingshansi/p/9029081.html 前言 FIFO中的计数用的是格雷码, ...