为什么都不写floyd
查看原帖
为什么都不写floyd
1283045
NOI109_bjh楼主2025/7/25 10:24

floyd复杂度为O(p^3),题目中p<=800,不会TLE,甚至不用优化,为什么题解区里都是spfa和dij?

floyd AC代码:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define int long long

using namespace std;
const int e=1e3+10;

int n,p,c,ans=INF;
int a[e];
int mp[e][e];

signed main(){
    ios::sync_with_stdio(0);
    cout.tie(0);cin.tie(0);

    memset(mp,0x3f,sizeof mp);

    for(int i=1;i<e;i++)
        mp[i][i]=0;
    
    cin>>n>>p>>c;
    for(int i=1;i<=n;i++)
        cin>>a[i];

    for(int i=1;i<=c;i++){
        int u,v,w;
        cin>>u>>v>>w;
        mp[u][v]=mp[v][u]=min(mp[u][v],w);
    }

    for(int k=1;k<=p;k++)
        for(int i=1;i<=p;i++)
            for(int j=1;j<=p;j++)
                mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
        
    for(int i=1;i<=p;i++){
        int cnt=0,flag=1;

        for(int j=1;j<=n;j++){
            if(mp[i][a[j]]!=INF)
                cnt+=mp[i][a[j]];
            else flag=0;
        }
        
        if(flag&&cnt>=0)
            ans=min(ans,cnt);
    }

    cout<<ans<<'\n';

    return 0;
}
2025/7/25 10:24
加载中...