[NOIp2014] luogu P2296 寻找道路
2024-09-01 10:45:39
不知道是因为我菜还是别的,最近老是看错题。
题目描述
在有向图 GGG 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:
- 路径上的所有点的出边所指向的点都直接或间接与终点连通。
- 在满足条件 1 的情况下使路径最短。
注意:图 GGG 中可能存在重边和自环,题目保证终点没有出边。
请你输出符合条件的路径的长度。
Solution
- 定义一个点是黑点,当且仅当它能沿着边走到终点(不需满足题设条件);
- 定义一个点是YH点,当且仅当它引出的边指向的点都是黑点(起点终点都是YH点);
- 删去所有非YH点,跑 SPFA 即可。
注意反向建图
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int MAXN=10010;
const int MAXM=200010;
struct node{
int x,y,next;
}e[MAXM];
int len=0;
int first[MAXN];
int n,m;
int sx,sy;
bool dis[MAXN];
int ST,ED;
int st,ed;
int q[MAXM*10];
int f[MAXN],v[MAXN];
void ins(int x,int y){
e[++len].x=x;e[len].y=y;
e[len].next=first[x];first[x]=len;
}
void init(){
memset(dis,1,sizeof(dis));dis[ED]=0;
st=1;ed=2;q[1]=ED;
while(st!=ed){
int x=q[st];
for(int i=first[x];i;i=e[i].next){
int y=e[i].y;
if(!dis[y]) continue;
dis[y]=0;
q[ed++]=y;
}
++st;
}
if(dis[ST]){
puts("-1");
exit(0);
}
bool rework[MAXN];
memset(rework,0,sizeof(rework));
for(int i=1;i<=n;++i)
if(dis[i]){
rework[i]=1;
for(int j=first[i];j;j=e[j].next)
rework[e[j].y]=1;
}
for(int i=1;i<=n;++i)
dis[i]=rework[i];
}
void spfa(){
memset(f,63,sizeof(f));f[ED]=0;
memset(v,0,sizeof(v));v[ED]=1;
st=1;ed=2;q[1]=ED;
while(st!=ed){
int x=q[st];
for(int i=first[x];i;i=e[i].next){
int y=e[i].y;
if(dis[y]) continue;
if(f[y]>f[x]+1){
f[y]=f[x]+1;
if(!v[y]){
v[y]=1;
q[ed++]=y;
}
}
}
++st;v[st]=0;
}
}
inline int read(){
int x=0; char c;
do c=getchar(); while(c<'0'||c>'9');
while(c>='0'&&c<='9')
x=x*10+c-48,c=getchar();
return x;
}
int main(){
n=read();m=read();
for(int i=1;i<=m;++i){
sx=read();sy=read();
ins(sy,sx);
}
ST=read();ED=read();
init();
spfa();
printf("%d",f[ST]);
}
最新文章
- 本地显示svg正常显示,在工程项目中无法正常显示
- 项目集成ReactiveCocoa遇到的坑及解决办法
- eclipse的快捷键大全
- zoj 3365
- C#调用C++编写的DLL函数, 以及各种类型的参数传递 z
- css3盒模型学习--利用box自适应布局
- Navicat如何导出Excel格式表结构
- Python 新式类与经典类
- Python 文档学习
- Linux关闭IPV6
- hihoCoder #1106 : Koch Snowflake 微软苏州校招笔试(1月17日)
- PyCharm 安装及破解方法
- 《AngularJS权威教程》
- git cherry-pick 用法
- homestead 添加新站点
- Scala_运算符
- 如何用MaskBlt实现两个位图的合并,从而实现背景透明
- Android基础总结(九)多媒体
- php新浪云链接mysql与storage
- 线段树【洛谷P2894】 [USACO08FEB]酒店Hotel
热门文章
- 加入百度地图遇到 framework not found BaiduMapAPI***
- 字节输入流InputStream
- charles 编辑菜单总结
- Leetcode 96.不同的搜索二叉树
- WebApi简介
- MySQL-Access denied for user &#39;username&#39;@&#39;localhost&#39; (using password: YES) 解决
- mysql 排序规则
- pandas.DataFrame的groupby()方法的基本使用
- .Net Core 商城微服务项目系列(十):使用SkyWalking构建调用链监控(2019-02-13 13:25)
- 【钢琴伴奏基本形态和伴奏织体】技能 get