https://www.luogu.org/problem/show?pid=2296

满足条件的路径:路径上的所有点的出边所指向的点都与终点连通。
反过来,不满足条件的路径:路径上至少一点的出边所指向的点不与终点连通。
考虑把所有与终点不连通的点以及指向他们的点都删掉,再一遍BFS求出最短路径。

具体做法:
对原图的转置图(将所有边的方向翻转得到的图)从终点开始一遍搜索,把传达不到的爱恋点以及在转置图中它们的所有出点全部标记。注意用两种不同的标记,否则会混乱。
最后在原图跑一遍BFS求出最短路径,有标记的点都不管。

#include <iostream>
#include <vector>
#include <queue>
#define maxn 10005
using namespace std;
int n, m, s, t;
vector<int> g[maxn], gt[maxn];
bool visited[maxn];
int dist[maxn];
int mark[maxn]; // 0/1表示该点与终点不连通/联通,-1表示该点指向标记0的点
void dfs(int k)
{
mark[k] = ;
for (int i = ; i < gt[k].size(); i++)
{
if (!visited[gt[k][i]])
{
visited[gt[k][i]] = true;
dfs(gt[k][i]);
}
}
}
void bfs()
{
queue<int> q;
q.push(s);
while (!q.empty() && dist[t] == )
{
int k = q.front();
q.pop();
if (mark[k] == )
{
for (int i = ; i < g[k].size(); i++)
{
if (!dist[g[k][i]])
{
dist[g[k][i]] = dist[k] + ;
q.push(g[k][i]);
}
}
}
}
}
int main()
{
cin >> n >> m;
int a, b;
for (int i = ; i <= m; i++)
{
cin >> a >> b;
if (a != b)
{
g[a].push_back(b);
gt[b].push_back(a);
}
}
cin >> s >> t;
dfs(t);
for (int i = ; i <= n; i++)
{
if (mark[i] == )
{
for (int j = ; j < gt[i].size(); j++)
{
mark[gt[i][j]] = -;
}
}
}
bfs();
cout << (dist[t] > ? dist[t] : -) << endl;
return ;
}

最新文章

  1. (原创)解决.net 下使用uploadify,在火狐浏览器下的error 302
  2. python获取父类的子类(遍历,递归),并循环执行所有子类的某一方法
  3. python字典
  4. iframe自适应高度,根据src中页面来得到。
  5. [DBW]js获取当前时间(昨天、今天、明天)
  6. PDA手持移动POS销售开单软件(网络版)、PDA手持设备小票机
  7. jQuery 源码理解的基础
  8. Octopus系列之如何让前台的js脚本变得灵活重用
  9. 使用Dnsmasq搭建本地dns服务器上网
  10. 【Tsinsen】【A1365】森林旅店
  11. Oracle VM Virtual Box 4.3 小巧精悍的虚拟机软件
  12. 面向对象 ---Java抽象类
  13. Arcgis API for Android之GPS定位
  14. 游戏开发实验室的内部讲座总结----c++
  15. Python异常处理体系
  16. 动态添加删除网卡 - 每天5分钟玩转 OpenStack(156)
  17. mysql分页查询优化
  18. Linux下部署tomcat
  19. Linux常见命令(三)
  20. ArcGis 属性表.dbf文件使用Excel打开中文乱码的解决方法

热门文章

  1. ubuntu-17.10 安装 FANN
  2. IdentityServer4 登录成功后,跳转到原来页面
  3. hbase的HQuorumPeer和QuorumPeerMain
  4. $.grep()函数
  5. jsbin本地部署
  6. jQuery选择器(内容过滤选择器)第四节
  7. Flexbox 布局教程
  8. Robotframework-Appium系列:安装配置
  9. 【译】Asp.Net Identity Cookies 格式化
  10. WebService--jax-spring集成