2 条题解

  • 2
    #include<bits/stdc++.h>
    using  namespace std;
    typedef long long ll;
    const ll N=1005;
    int n,i,j=0,m,x=0,y,q,t=0,a[N][N];
    int main()
    {
        cin>>n>>m;
        memset(a,999999,sizeof(a));
        for(i=1;i<=n;i++)
            a[i][i]=0;
        for(i=1;i<=m;i++)
        {
            cin>>x>>y;
            a[x][y]=1;
            a[y][x]=1; 
        }
        for(int k=1;k<=n;k++)
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                    if(a[i][j]>a[i][k]+a[k][j])
                        a[i][j]=a[i][k]+a[k][j];
        cin>>q;
        for(i=1;i<=q;i++)
        {
            cin>>x>>y;
            for(j=1;j<=n;j++)
                if(a[x][j]+a[j][y]==a[x][y])
                    t++;
            cout<<t<<endl;
            t=0;
        }
        return 0;
    }
    
    
  • 1
    @ 2026-08-08 13:07:10
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    int n,m,p,g[105][105];
    void floyd()
    {
        for (int k=1;k<=n;k++)
            for (int i=1;i<=n;i++)
                for (int j=1;j<=n;j++)
                    g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
    }
    signed main()
    {
        cin>>n>>m;
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++)
            {
                g[i][j]=INT_MAX;
                if (i==j) g[i][j]=0;
            }
        for (int i=1;i<=m;i++)
        {
            int u,v;
            cin>>u>>v;
            g[u][v]=1,g[v][u]=1;
        }
        floyd();
        cin>>p;
        for (int i=1;i<=p;i++)
        {
            int a,b;
            cin>>a>>b;
            int sum=2;
            for (int i=1;i<=n;i++)
                if (i!=a&&i!=b&&g[a][b]==g[i][b]+g[a][i])
                    sum++;
            cout<<sum<<endl;
        }
        return 0;
    }
    
  • 1

信息

ID
1143
难度
8
分类
图结构 | 最短路 点击显示
标签
递交数
16
已通过
6
通过率
38%
上传者