133532025-01-07 16:58:11horkaRácsháló gráfcpp17Elfogadva 50/5023ms632 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,m; cin>>n>>m;
    int inf=1e6;
    int k; cin>>k;
    int s=n*m+1;
    vector<vector<int>> tav(s, vector<int> (s, inf));
    for(int i=1; i<s; i++)
        tav[i][i]=0;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
    {
        int curr=(i-1)*m+j;
        if(j!=1)
        {
            //cout<<curr<<" "<<curr-1<<endl;
            tav[curr][curr-1]=tav[curr-1][curr]=1;
        }
        if(curr+m<s)
        {
            tav[curr][curr+m]=tav[curr+m][curr]=1;
        }
    }
    for(int k=1; k<s; k++)
        for(int i=1; i<s; i++)
            for(int j=1; j<s; j++)
                tav[i][j]=min(tav[i][j],tav[i][k]+tav[j][k]);
    while(k--)
    {
        int a,b; cin>>a>>b;
        tav[a][b]=tav[b][a]=1;
        int ans=0;
        for(int i=1; i<s; i++)
            for(int j=1; j<s; j++)
            {
                tav[i][j]=min({tav[i][j],tav[i][a]+tav[j][a]});
                tav[j][i]=min(tav[j][i],tav[i][j]);

            }
        for(int i=1; i<s; i++)
            for(int j=1; j<s; j++)
        {
            tav[i][j]=min(tav[i][j],tav[i][b]+tav[j][b]);
            tav[j][i]=min(tav[i][j],tav[j][i]);
            ans=max(ans,tav[i][j]);
        }
        cout<<ans<<"\n";
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/023ms564 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms500 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/23ms324 KiB
8Elfogadva2/23ms316 KiB
9Elfogadva2/23ms316 KiB
10Elfogadva2/21ms632 KiB
11Elfogadva2/23ms316 KiB
12Elfogadva2/214ms588 KiB
13Elfogadva3/39ms516 KiB
14Elfogadva3/33ms316 KiB
15Elfogadva3/39ms516 KiB
16Elfogadva3/33ms560 KiB
17Elfogadva3/38ms316 KiB
18Elfogadva3/33ms316 KiB
19Elfogadva3/31ms316 KiB
20Elfogadva3/31ms316 KiB
21Elfogadva3/33ms456 KiB
22Elfogadva3/323ms592 KiB