zoukankan      html  css  js  c++  java
  • P2296 寻找道路

    ————————————————————————————————————————————————————————

    // luogu-judger-enable-o2
    // luogu-judger-enable-o2
    #include<bits/stdc++.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    struct node{int nxt,to;}eg[200100];
    int head[201000],ne,n,m,vist[200100],dis[201000],flag[200100],a,b,s,t;
    void adde(int f,int v){eg[++ne].to=v;eg[ne].nxt=head[f];head[f]=ne;}
    void spfa1(){
        queue<int> q;
        for(int i=1;i<=n;i++) dis[i]=INF; 
        q.push(t);dis[t]=0; vist[t]=1;
        while(!q.empty()){
        int u=q.front();
        q.pop();vist[u]=0;
        for(int i=head[u];i;i=eg[i].nxt)
            if(dis[eg[i].to]>dis[u]+1){
                dis[eg[i].to]=dis[u]+1;
                if(vist[eg[i].to]==0){vist[eg[i].to]=1;q.push(eg[i].to);}
            }   
        }
    }
    void spfa2(){
        queue<int> q;
        for(int i=1; i<=n; i++) dis[i]=INF; 
        q.push(t);dis[t]=0;vist[t]=1;
        while(!q.empty()){
        int u=q.front();
        q.pop();vist[u]=0;
        for(int i=head[u];i;i=eg[i].nxt)
            if(dis[eg[i].to]>dis[u]+1&&flag[eg[i].to]==0){
                dis[eg[i].to]=dis[u]+1;
                if(vist[eg[i].to]==0){vist[eg[i].to]=1;q.push(eg[i].to);}
            }   
        }
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=m;i++)
        {cin>>a>>b;if(a==b)continue;adde(b,a);}
        cin>>s>>t;
        spfa1();
        for(int i=1;i<=n;i++)
            if(dis[i]>=INF)
            for(int j=head[i];j;j=eg[j].nxt)flag[eg[j].to]=1;
        spfa2();
        if(dis[s]>=INF)cout<<-1;
        else
        cout<<dis[s];
    }

    输出只有一行,包含一个整数,表示满足题目描述的最短路径的长度。如果这样的路径不存在,输出-11。

  • 相关阅读:
    手把手教你用Python制作简易小说阅读器
    JSP的page指令
    Web应用的目录结构
    myeclipse怎么集成tomcat
    Tomcat启动注意点
    JSP基础概念
    SQL数据库数据类型详解
    注释和特殊符号
    StringBuffer
    String
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/10961192.html
Copyright © 2011-2022 走看看