zoukankan      html  css  js  c++  java
  • csuoj 1256

    题意:给出一张有向图,问最少改变多少条边的方向,使得图中存在一条从1到N的路径

    思路:原本有的路径权值为0,新加一个反向的路径,权值为1,这样只要走一次新加的路径,最短路就会加1,最后的长度就是新加路径的个数了

      

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #define MAX 20010
    #define inf 0x3f3f3f3f
    int n,m;
    int first[MAX],d[MAX],inq[MAX],w[MAX],v[MAX],next[MAX],e;
    
    void init()
    {
        e =0 ;
        memset(first,-1,sizeof(first));
    }
    
    void add_edge(int a,int b,int c)
    {
        v[e] = b;
        next[e] = first[a];
        w[e] = c;
        first[a]= e++;
    }
    void spfa(int src)
    {
        queue<int>q;
        memset(d,0x3f,sizeof(d));
        d[src]= 0,inq[src] = 1;
        q.push(src);
        while(!q.empty())
        {
            int u = q.front();
            q.pop();
            inq[u] =0;
            for(int i =first[u];i!= -1;i = next[i])
            {
                if(d[v[i]]>d[u]+w[i])
                {
                    d[v[i]] = d[u]+ w[i];
                    if(!inq[v[i]])q.push(v[i]),inq[v[i]] =1;
                }
            }
        }
    }
    
    int main()
    {
        while(cin>> n>> m)
        {
            init();
            for(int i=0;i< m;i++)
            {
                int a,b;
                cin >> a>>b;
                add_edge(a,b,0);
                add_edge(b,a,1);
            }
            spfa(1);
            if(d[n]!= inf)cout<<d[n]<< endl;
            else cout<< "-1"<< endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    泛型自限定
    java 泛型类转型
    迷茫
    spring boot 连接mysql 错误The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one
    mysql8.0.14 安装
    泛型通配符
    java 泛型数组
    java FTP上传文件
    spring location设置本地路径
    套接口定义
  • 原文地址:https://www.cnblogs.com/DUANZ/p/3877376.html
Copyright © 2011-2022 走看看