1 solutions

  • 0
    @ 2025-11-5 19:21:47

    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

    Information

    ID
    19291
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    (None)
    # Submissions
    0
    Accepted
    0
    Uploaded By