zoukankan      html  css  js  c++  java
  • C. Anna, Svyatoslav and Maps

    C. Anna, Svyatoslav and Maps

    给定一个有向图,给定一条有向路径,求一条顶点最少的路径,使得给定的路径是它的最短路

    folyd预处理出任意两点间的最短路,然后判断是否可以缩点

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    typedef long long ll;
    #define sc(x) scanf("%I64d",&(x));
    #define rd(A) for(int i=0;i<N;i++) scanf("%I64d",&A[i]);
    #define P pair<ll,ll>
    #define se second
    #define fi first
    #define pb push_back
    #define inf 1e18
    #define endl '
    '
    #define mem(A) memset(A,0,sizeof A);
    #define maxn 1000+10
    #define maxm 1000000+10
    string A[maxn];
    ll N,T,a,b,M;
    ll B[maxm];
    ll v[maxm];
    ll dis[maxn][maxn];
    void folyd(int n)
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                dis[i][j]=inf;
                if(A[i][j-1]=='1')dis[i][j]=1;
                if(i==j)dis[i][j]=0;
            }
     
        }
     
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                for(int k=1; k<=n; k++)
                {
                    dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
                }
            }
        }
     
     
    }
    signed main()
    {
        sc(N);
        for(int i=1; i<=N; i++)
        {
            cin>>A[i];
        }
        sc(M);
        folyd(N);
        for(int i=0; i<M; i++)
        {
            sc(B[i]);
        }
        int k=1;
        v[0]=B[0];
        v[1]=B[1];
        int pre=B[0];
        int p=B[1];
        for(int i=2; i<M; i++)
        {
            //cout<<k<<' '<<i<<endl;
            if(k>0&&dis[pre][B[i]]>dis[pre][p])
            {
              //cout<<pre<<" "<<p<<" "<<i<<" "<<B[i]<<dis[pre][B[i]]<<' '<<dis[pre][p]<<endl;
                k--;
                pre=v[k-1];
                p=v[k];
            }
            //if(dis[pre][B[i]]<=dis[pre][p])
            {
                v[++k]=B[i];
                pre=v[k-1];
                p=v[k];
            }
     
        }
        cout<<k+1<<'
    ';
        for(int i=0; i<=k; i++)
        {
            cout<<v[i]<<' ';
        }
    }
  • 相关阅读:
    zabbix监控docker容器
    webview_flutter解决<input type='file'>无效的问题
    vue element admin学习过程
    Flutter实现语音通话
    Flutter实现文档预览
    django css文件导入,模板继承
    豆瓣 爬虫
    django学习,captcha图形验证码的使用
    django学习 session保持登录,且登出
    java 学习(day2) 时钟类
  • 原文地址:https://www.cnblogs.com/liulex/p/11386972.html
Copyright © 2011-2022 走看看