NOIp 2014 寻找道路【图的遍历/最短路】By cellur925
2024-08-26 21:07:02
比较裸的图论,结果自己还是没做出来,我真菜。
我们根据题意,只要把不能通向终点的点求出,然后再分别以这些点为起点,求出它们能到达的点,这些点也不能在路径上。
之后跑一个最短路即可。
注意以上操作均是在建反图的基础上进行的。我们交换起终点,这是等价的。
细节操作:开新数组记录不能到达的点,因为搜索还没结束,会重复。
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 ;
}
最新文章
- Urimoo做试卷
- 【我是老中医】codeblocks无法编译的问题解决方法
- ASP.NET MVC的请求生命周期
- Python 以正确的宽度在盒子中居中打印一个字符
- 正则应用—queryURLParameter()
- fork与vfork的区别
- JDBC编程之优化
- sleep函数——Gevent源码分析
- 输出一个string的所有排列情况
- Redis多实例及主从搭建
- kafka生产实践
- es6学习笔记--新数据结构Set,Map以及WeakSet,WeakMap
- javascript 计算文件MD5 浏览器 javascript读取文件内容
- java后台list集合传值到前台,再取值的几种方法
- .NET二级域名共享Session
- 3D空间中射线与三角形的交叉检测算法【转】
- [shell]shell中if语句的使用
- asp.net mvc 本地化 默认的错误提示
- 快速找出System.Management.Automation.dll,c#调用powershell
- python打造漏洞补丁缺少检测
热门文章
- Linux下使用Curl调用Java的WebService接口
- hybird app 用 xcode ios打包 ipa 测试包并且安装真机测试
- 转:String数组初始化
- WinCE5.0如何安装.NET3.5
- arcgis安装路径的获得
- linux的shell的until循环举例说明
- sqlzoo练习答案--SELECT within SELECT Tutorial
- 迅雷CTO李金波:致创业者的一封信
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
- sql server 笔记1--case、WAITFOR、TRY CATCH