NOIP 2014 Day2T2 寻找道路

原创 2018年04月15日 21:54:25

题目中文,不需要我说,直接讲思路

题目要求找到一条从起点到终点的路径,而且保证最短的前提下,每个点的出边连接的点都要能到达终点,so

第一步,反向建图,跑一遍bfs,确定能到达终点的所有点

第二步,减掉连着不能到达终点的点的点以及不能到达终点的点,用一个随便什么数组记录能用的点就好了

第三步,正常的最短路,只需要加上刚刚判断的这个点能不能用就好

第四步,没了,emmm

代码

#include<cmath>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=500000;
int n,m,s,e;
int jud[M];
int vis[M];
int dis[M];
int ono[M];
vector<int>v[M];
vector<int>vv[M];
int dfs(int st)
{
    if (jud[st]) return 0;
    jud[st]=1;
    for (int i=0;i<vv[st].size();i++)
    {
        dfs(vv[st][i]);
    }
    return 0;
}
int bfs()
{
    fill(dis,dis+n+n,M);
    queue<int>q;
    q.push(s);
    dis[s]=0;
    while (q.size())
    {
        int u=q.front();q.pop();
        vis[u]=0;
        for (int i=0;i<v[u].size();i++)
        {
            int go=v[u][i];
            if (!ono[go])
            {
                if (dis[go]>dis[u]+1)
                {
                    dis[go]=dis[u]+1;
                    if (!vis[go])
                    {
                        vis[go]=1;
                        q.push(go);
                    }
                }
            }
        }
    }
    return 0;
}
int main()
{
    cin>>n>>m;
    for (int i=1;i<=m;i++)
    {
        int a,b;
        scanf("%d %d",&a,&b);
        v[a].push_back(b);
        vv[b].push_back(a);
    }
    cin>>s>>e;
    dfs(e);
    jud[e]=1;
    for (int i=1;i<=n;i++) 
    for (int k=0;k<v[i].size();k++)
    if (!jud[v[i][k]])  ono[i]=1;
    bfs();
    if (dis[e]==M) cout<<-1;
    else cout<<dis[e];
    return 0;
}


版权声明: https://blog.csdn.net/ACerAndAKer/article/details/79953772

NOIP2014寻找道路

哭唧唧本想着这么简单的题连调试都没有就交了然后90QAQQQQQQQQQ,良久,突然发现第二次bfs的判重数组居然开在了bfs里面而且没有清0,嘤嘤嘤,加一个清零然后就AC了QAQQQQQQQQQQQ...
  • BPM136
  • BPM136
  • 2015-09-03 16:27:06
  • 1324

【NOIP2014提高组T5】寻找道路-双spfa

【NOIP2014提高组T5】寻找道路-双spfa
  • Maxwei_wzj
  • Maxwei_wzj
  • 2016-07-19 19:07:43
  • 468

【NOIP2014 Day2 T2】寻找道路

【NOIP2014 Day2 T2】寻找道路 Time Limit:10000MS  Memory Limit:131072K Total Submit:33 Accepted:25  Case...
  • Formiko
  • Formiko
  • 2015-09-04 21:48:16
  • 1055

NOIP2014 寻找道路

题目:http://www.luogu.org/problem/show?pid=2296# 分析:简单图论,搜搜搜,就A了…… 代码: #include &amp;lt;cstdio&am...
  • jerry99s
  • jerry99s
  • 2015-06-13 21:46:12
  • 695

【noip2014】寻找道路

【noip2014】寻找道路 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1....
  • Clove_unique
  • Clove_unique
  • 2015-10-29 16:40:55
  • 942

NOIP 2014 寻找道路

思路: 反向建边 看能到哪儿再正向搞 我傻乎乎地最后竟然用了Dijkstra 普通BFS就可以//By SiriusRen #include #include #include #in...
  • qq_31785871
  • qq_31785871
  • 2016-09-05 21:28:37
  • 313

NOIP2014 day2 T2 洛谷P2296 寻找道路

SPFA单源最短路径
  • SilverNebula
  • SilverNebula
  • 2016-05-31 18:30:07
  • 503

NOIP2014提高组 寻找道路

描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通。在满足条件...
  • zzx2015
  • zzx2015
  • 2015-08-11 17:43:48
  • 594

[NOIP2014]寻找道路 D2 T2 bfs

come on 题目描述这题实在是太水了 因为是有向图 又要求每一个点都是双向联通。。。。 偶 那你就从终点BFS(DFS)一一遍就行了 把所有不能到达的点标记一下 然后从起点跑sssp就...
  • qq_32451161
  • qq_32451161
  • 2016-03-18 12:49:28
  • 555

寻找道路 noip2014D2T2

题目描述在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:1.路径上的所有点的出边所指向的点都直接或间接与终点连通。 2.在满足条件1...
  • jpwang8
  • jpwang8
  • 2017-03-04 22:58:24
  • 231
收藏助手
不良信息举报
您举报文章:NOIP 2014 Day2T2 寻找道路
举报原因:
原因补充:

(最多只允许输入30个字)