暴力92分,求优化
查看原帖
暴力92分,求优化
1778019
Tangcm楼主2025/7/27 11:41

实在调不出来了,84分改到了92分……

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,g[101][101],g1[101][101],maxn,mi,mj,sum,ms=1e9;
void Floyd1()
{
    for(ll k=1;k<=n;k++)
    {
        for(ll i=k+1;i<n;i++)
        {
            for(ll j=i+1;j<=n;j++)g1[i][j]=g1[j][i]=g[j][i]=g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
        }
    }    
}
void Floyd2()
{
    for(ll k=1;k<=n;k++)
    {
        for(ll i=1;i<n;i++)
        {
            for(ll j=i+1;j<=n;j++)g1[j][i]=g1[i][j]=min(g1[i][j],g1[i][k]+g1[k][j]);
        }
    }
}
int main()
{
    cin>>n>>m;
    for(ll i=1;i<=n;i++)
    {
        for(ll j=1;j<=n;j++)g1[i][j]=g1[j][i]=g[i][j]=g[j][i]=1e9;
	}
    for(ll i=1;i<=m;i++)
    {
        ll u,v,w;
        cin>>u>>v>>w;
        g1[u][v]=g1[v][u]=g[u][v]=g[v][u]=w;
    }
    for(ll i=1;i<=n;i++)g[i][i]=0;
    Floyd1();
    for(ll o=1;o<n;o++)
    {
        for(ll l=o+1;l<=n;l++)
        {
            if(o==l)break;
            g1[o][l]=sum=0;
            Floyd2();
            for(ll i=1;i<n;i++)
            {
                for(ll j=i+1;j<=n;j++)
                {
                    sum+=g1[i][j];
                    g1[i][j]=g1[j][i]=g[i][j];
                }
            }
            if(ms>sum)ms=sum;
        }
    }
    cout<<ms;
}

QAQ

2025/7/27 11:41
加载中...