题目:洛谷P2296、Vijos P1909、codevs3731、UOJ#19。

题目大意:给你一张有向图,边权为1,让你找一条s到t的最短路径,但这条路径上所有点的出边所指向的点都与终点连通。如果没有这样的路径,输出-1。

解题思路:由于有限制条件,我们可以建反向图,从t开始跑一遍dfs,找出所有不能到达t的点。然后bfs求无权图最短路。对于每一个点,先判断其是否连通着不与终点连通的点,如果有则跳过该点。最后判断从s到t的最短路是否为inf即可。

C++ Code:

#include<cstdio>
#include<cctype>
#include<cstring>
#include<queue>
using namespace std;
struct edge{
int from,to,nxt;
}e[2][200005];
int head[2][200005],cnt,n,m,s,t;
bool b[10005],vis[10005];
int dis[10005];
queue<int>q;
template <typename T>inline void read(T& x){
x=0;
char c=getchar();
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^'0');
}
inline void addedge(int x,int y){
e[0][++cnt]=(edge){x,y,head[0][x]};
e[1][cnt]=(edge){y,x,head[1][y]};
head[0][x]=head[1][y]=cnt;
}
void dfs(int now){
b[now]=true;
for(int i=head[1][now];i;i=e[1][i].nxt){
if(!b[e[1][i].to])dfs(e[1][i].to);
}
}
void bfs(int s){
memset(vis,0,sizeof vis);
memset(dis,0x3f,sizeof dis);
vis[s]=true;
dis[s]=0;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
if(!b[u])continue;
bool flag=true;
for(int i=head[0][u];i;i=e[0][i].nxt)
if(!b[e[0][i].to]){
flag=false;
break;
}
if(flag)
for(int i=head[0][u];i;i=e[0][i].nxt){
int v=e[0][i].to;
if(!vis[v]){
vis[v]=true;
dis[v]=dis[u]+1;
q.push(v);
}
}
}
}
int main(){
cnt=0;
read(n);
for(read(m);m--;){
int x,y;
read(x),read(y);
addedge(x,y);
}
read(s),read(t);
memset(b,0,sizeof b);
dfs(t);
bfs(s);
printf("%d\n",(dis[t]<0x3f3f3f3f)?(dis[t]):(-1));
return 0;
}

[NOIP2014提高组]寻找道路的更多相关文章

  1. [NOIP2014] 提高组 洛谷P2038 无线网络发射器选址

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

  2. [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路

    [NOIp2013提高组]积木大赛/[NOIp2018提高组]铺设道路 题目大意: 对于长度为\(n(n\le10^5)\)的非负数列\(A\),每次可以选取一个区间\(-1\).问将数列清零至少需要 ...

  3. 刷题总结——飞扬的小鸟(NOIP2014提高组)

    题目: 题目背景 NOIP2014 提高组 Day1 试题. 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面 ...

  4. 垃圾陷阱 && [NOIP2014 提高组] 飞扬的小鸟

    #include<bits/stdc++.h> using namespace std; int d,n,dp[1010]; struct node{int t,f,h;} a[1010] ...

  5. NOIP2014 day2 t2 寻找道路

    寻找道路 NOIP2014 day2 t2 描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指向的 ...

  6. 2019.6.5 NOIP2014 day2 t2 寻找道路

    我竟然一个人敲了NOIP提高组的t2? 题目描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直 ...

  7. NOIP2014提高组 酱油记

    NOIP考到哪里我就写到哪里好了. 2014/10/12 初赛 下午两点半开始考,我两点就到了.然后看到了QYL,NYZ,CZR等大神,先Orz了再说. 考试开始前,发现考场竟然没几个我认识的,不是按 ...

  8. noip2014 提高组

    T1 生活大爆炸版 石头剪刀布 题目传送门 就是道模拟题咯 #include<algorithm> #include<cstdio> #include<cstring&g ...

  9. NOIP2014提高组 题解报告

    D1 T1 无线网路发射器选址 题目大意:找一个矩形,使其覆盖的目标点最大. 题目过水,直接暴力搞过去,代码就不贴了. 但我TM居然有个地方SB了,调了半天才发现输入有问题: scanf(" ...

随机推荐

  1. BZOJ 2301 莫比乌斯函数+分块

    思路: 同BZOJ1101 就是加个容斥 - http://blog.csdn.net/qq_31785871/article/details/54340241 //By SiriusRen #inc ...

  2. Android setImageResource与setImageBitmap的区别

    同样的布局文件,小分辨率手机: 1.使用setImageBitmap设置时,出现如下现象: 2.使用setImageResource时,图片显示正常 原因:setImageResource(id)会根 ...

  3. 【原创】java中各种集合类的实现浅析

    [LinkedList] LinkedList使用了链表来实现List功能,而且是双向循环链表,它的Entry定义如下: private static class Entry<E> { / ...

  4. 3ds Max制作客厅场景实例教程

    附件系列 (图01) 让我们回顾一下场景:一个房间包括下列一件件家具, 在中间的一张小桌子,在房间的角落的一个小桌子,有一个垃圾桶和一个带镜子的边桌,有一个烛台.还有一个挂钟,窗帘,沙发和带手臂的椅子 ...

  5. 洛谷P2766 最长不下降子序列问题 网络流_DP

    Code: #include<cstdio> #include<iostream> #include<vector> #include<algorithm&g ...

  6. HDU-5685 Problem A 求乘法逆元

    题目链接:https://cn.vjudge.net/problem/HDU-5685 题意 给一个字符串S和一个哈希算法 $ H(s)=\prod_{i=1}^{i\leq len(s)}(S_{i ...

  7. Django之ORM的增删改查

    一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...

  8. Ubuntu 如何进入系统文件/etc/profile修改内容

    转载:https://blog.csdn.net/cfq1491/article/details/81088117 /etc/profile 默认权限为 -rw-r--r-- 即只有root用户可以修 ...

  9. 比较排序算法(PHP)

    冒泡排序 两两比较相邻记录的关键字,如果反序则交换,大的数字往下沉,一直到最大的出现在数组最后 function swap(&$x, &$y) { $temp = $x; $x = $ ...

  10. jsp页面跳转的路径问题

    <form class="box login" action="/graduation_system/BServlet" method="pos ...