题目传送门

比较裸的图论,结果自己还是没做出来,我真菜。

我们根据题意,只要把不能通向终点的点求出,然后再分别以这些点为起点,求出它们能到达的点,这些点也不能在路径上。

之后跑一个最短路即可。

注意以上操作均是在建反图的基础上进行的。我们交换起终点,这是等价的。

细节操作:开新数组记录不能到达的点,因为搜索还没结束,会重复。

Code

 #include<cstdio>
#include<algorithm>
#include<queue> using namespace std;
const int inf=0x3f3f3f3f; int n,m,x,y,s,t,tot,qwq;
int head[],vis[],laz1[],dis[],tmp[],laz[];
struct node{
int to,next;
}edge[]; void add(int x,int y)
{
edge[++tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
}
void dfs(int x)
{
laz1[x]=;
for(int i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(laz1[y]) continue;
dfs(y);
}
} void spfa()
{
queue<int>q;
for(int i=;i<=n;i++) dis[i]=inf;
q.push(t);vis[t]=;dis[t]=;
while(!q.empty())
{
int x=q.front();q.pop();vis[x]=;
if(!laz[x]) continue;
for(int i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(dis[y]>dis[x]+&&laz[y])
{
dis[y]=dis[x]+;
if(!vis[y]) q.push(y),vis[y]=;
}
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
scanf("%d%d",&x,&y),add(y,x);
scanf("%d%d",&s,&t);
dfs(t);
if(!laz1[s])
{
printf("-1");
return ;
}
for(int i=;i<=n;i++)
{
if(!laz1[i])
{
for(int k=head[i];k;k=edge[k].next)
tmp[++qwq]=edge[k].to;
}
else laz[i]=;
}
for(int i=;i<=qwq;i++) laz[tmp[i]]=;
spfa();
printf("%d",dis[s]);
return ;
}

最新文章

  1. Urimoo做试卷
  2. 【我是老中医】codeblocks无法编译的问题解决方法
  3. ASP.NET MVC的请求生命周期
  4. Python 以正确的宽度在盒子中居中打印一个字符
  5. 正则应用—queryURLParameter()
  6. fork与vfork的区别
  7. JDBC编程之优化
  8. sleep函数——Gevent源码分析
  9. 输出一个string的所有排列情况
  10. Redis多实例及主从搭建
  11. kafka生产实践
  12. es6学习笔记--新数据结构Set,Map以及WeakSet,WeakMap
  13. javascript 计算文件MD5 浏览器 javascript读取文件内容
  14. java后台list集合传值到前台,再取值的几种方法
  15. .NET二级域名共享Session
  16. 3D空间中射线与三角形的交叉检测算法【转】
  17. [shell]shell中if语句的使用
  18. asp.net mvc 本地化 默认的错误提示
  19. 快速找出System.Management.Automation.dll,c#调用powershell
  20. python打造漏洞补丁缺少检测

热门文章

  1. Linux下使用Curl调用Java的WebService接口
  2. hybird app 用 xcode ios打包 ipa 测试包并且安装真机测试
  3. 转:String数组初始化
  4. WinCE5.0如何安装.NET3.5
  5. arcgis安装路径的获得
  6. linux的shell的until循环举例说明
  7. sqlzoo练习答案--SELECT within SELECT Tutorial
  8. 迅雷CTO李金波:致创业者的一封信
  9. 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
  10. sql server 笔记1--case、WAITFOR、TRY CATCH