1 条题解

  • 0
    @ 2024-12-24 9:49:26

    C++ :

    #include <stdio.h>
    #include <string.h>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    vector<int> edge[105];
    int dp[105][105];
    
    int main()
    {
        int i,j,n,m,x,y,k;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for (i=0;i<n;i++)
            {
                edge[i].clear();
            }
            for (i=0;i<m;i++)
            {
                scanf("%d%d",&x,&y);
                x--;y--;
                edge[min(x,y)].push_back(max(x,y));
            }
            memset(dp,-1,sizeof(dp));
            dp[0][0]=1;
            for (i=0;i<n;i++)
            {
                for (j=0;j<n;j++)
                {
                    if (dp[i][j]==-1) continue;
                    if (i<=j)
                    {
                        for (k=0;k<edge[i].size();k++)
                        {
                            int e=edge[i][k];
                            if (e==j && e!=n-1) continue;
                            dp[e][j]=max(dp[e][j],dp[i][j]+1);
                        }
                    }
                    else
                    {
                        for (k=0;k<edge[j].size();k++)
                        {
                            int e=edge[j][k];
                            if (e==i && e!=n-1) continue;
                            dp[i][e]=max(dp[i][e],dp[i][j]+1);
                        }
                    }
                }
            }
            if (dp[n-1][n-1]==-1) printf("1\n");
            else printf("%d\n",dp[n-1][n-1]-1);
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    976
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者