zoukankan      html  css  js  c++  java
  • uva125 Numbering Paths

    DP,无耻地搜了解题报告……

    DP又卡住了,看了题目就觉得是DP,自己写了一个怎么过不过,另外解决不了环的问题,最后还是看了解题报告

    依然是仿照Floyd来DP。i到j经过k,那么i到j的路径数目等于i到k的路径数目乘以k到j的路径数目

    DP结束后扫描一遍所有的点,若d[k][k]不为0,说明从k出发能回到k(而题目说了输入不会存在自己到自己的环),那么从k点出发一定存在至少一条回路,d[k][k]=-1

    那么i到j,如果经过了点k,就有无数条路径(先从i到k,然后走回路回到k,再从k到j),把d[i][j]=-1

    #include <cstdio>
    #include <cstring>
    #define N 35
    int n,m;
    int d[N][N];
    
    void print_mat(int T)
    {
        printf("matrix for city %d\n",T);
        for(int i=0; i<=n; i++)
        {
            printf("%d",d[i][0]);
            for(int j=1; j<=n; j++)
                printf(" %d",d[i][j]);
            printf("\n");
        }
        return ;
    }
    void DP()
    {
        for(int k=0; k<=n; k++)
            for(int i=0; i<=n; i++)
                for(int j=0; j<=n; j++)
                    if(d[i][k] && d[k][j])
                        d[i][j]+=d[i][k]*d[k][j];
        return ;
    }
    void solve()
    {
        for(int k=0; k<=n; k++) if(d[k][k])
        {
            d[k][k]=-1;
            for(int i=0; i<=n; i++)
                for(int j=0; j<=n; j++)
                    if(d[i][k] && d[k][j])
                        d[i][j]=-1;
        }
        return ;
    }
    int main()
    {
        int T=0;
        while(scanf("%d",&m)!=EOF)
        {
            memset(d,0,sizeof(d));
            n=-1;
            for(int i=1; i<=m; i++)
            {
                int u,v;
                scanf("%d%d",&u,&v);
                d[u][v]=1;
                n=u>n?u:n;
                n=v>n?v:n;
            }
    
            DP();
            solve();
            print_mat(T);
            T++;
        }
        return 0;
    }

    增强DP啊,另外不要搜解题报告啊,感觉这题再憋一下的还是能憋出来的……搜解题报告的罪恶感好难受……

  • 相关阅读:
    angularJS(5)
    angularJS(4)
    angularJS(3)
    AngularJS(1)
    angularJS(2)
    关于响应式布局
    PHP+JQUEY+AJAX实现分页【转】
    bootscript/javascript组件
    你必须收藏的Github技巧
    关于php的一些小知识!
  • 原文地址:https://www.cnblogs.com/scau20110726/p/2821034.html
Copyright © 2011-2022 走看看