这道题真的很女少啊


言归正传:

这道题其实就是考验的思路,读题后,我们发现对于某个点他所连接的点必须连接终点,那么我们直接反向存图,从终点进行bfs,可以找到未连接的点,然后对这些点所连接的点进行标记,最后来一遍最短路就OK了。

SPFA好啊

上代码:

#include <bits/stdc++.h>
using namespace std;
int n , m , s , ee;
int dis[10010] , vis[10010] , f[10010];
vector<int> e[10010];
vector<int> pd[10010];
void spfa(){
queue<int> q;
q.push(s);
dis[s] = 0 , vis[s] = 0;
int x;
while(!q.empty()){
x = q.front();
q.pop();
vis[x] = 1; //spfa的时候需要这样重复更新
for(int i = 0; i < e[x].size(); i++){
int y = e[x][i];
if(!vis[y]) continue;
if(dis[x] + 1 < dis[y]){
dis[y] = dis[x] + 1;
if(vis[y]){
vis[y] = 0;
q.push(y);
}
}
}
}
}
void bfspd(){
queue<int> q;
f[ee] = 1;
q.push(ee);
int x;
while(!q.empty()){
x = q.front();
q.pop();
for(int i = 0; i < pd[x].size(); i++){
int y = pd[x][i];
if(!f[y]){
f[y] = 1;
q.push(y);
}
}
}
}
int main(){
cin >> n >> m;
for(int i = 1; i <= 10010; i++) dis[i] = 0x3fffff;
for(int i = 1; i <= m; i++){
int x , y;
cin >> x >> y;
if(x == y) continue; //重边
e[x].push_back(y);
pd[y].push_back(x); //倒序存储,用终点来看可以到达的点
}
cin >> s >> ee;
bfspd();
for(int i = 1; i <= n; i++) vis[i] = f[i]; //因为f数组会改变,所以提前复制到另外一个数组
for(int i = 1; i <= n; i++)
if(!f[i])
for(int j = 0; j < pd[i].size(); j++) if(vis[pd[i][j]]) vis[pd[i][j]] = 0;
spfa();
if(dis[ee] == 0x3fffff) cout << -1;
else cout << dis[ee];
return 0;
}

最新文章

  1. 第一种SUSE Linux IP设置方法
  2. nodeType的返回
  3. 动态规划 - 最长递增子序列(LIS)
  4. BZOJ-3669 魔法森林 Link-Cut-Tree
  5. STM32移植UCGUI3.90笔记
  6. 《C语言程序设计现代方法》第2章 C语言基本概念
  7. C#程序设计基础——变量
  8. chrome提供的功能
  9. C语言之复杂链表的复制(图示详解)
  10. pie.htc 在IE下不起作用~~~
  11. jquery easyui combobox 从指定位置开始模糊查询
  12. Vue 进阶之路(九)
  13. Linux下CenOS系统 安装Redis
  14. asp.net core 微信APP支付(扫码支付,H5支付,公众号支付,app支付)之4
  15. 下面有关 JAVA 异常类的描述,说法正确的有()
  16. Jmeter(十二)_打印时间戳
  17. ceilometer主要组件分析
  18. jstl函数的使用
  19. c++ 容器排序
  20. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #10 Fair Group Scheduling

热门文章

  1. ASP.NET中IHttpHandler与IHttpModule的区别(带样例说明)
  2. Java实现十六进制转十进制
  3. Java实现 LeetCode 434 字符串中的单词数
  4. Java实现 LeetCode 56 合并区间
  5. java实现第二届蓝桥杯最小公倍数(c++)
  6. PAT 数字黑洞
  7. mybatis技术总结
  8. shell命令:命令置换、进程管理
  9. ASP.NET Core 3.1 WebApi部署到腾讯云CentOS 7+Docker
  10. protected关键字对父子成员变量的影响