1 条题解

  • 0
    @ 2023-8-16 10:12:41
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #define ULL unsigned long long
    
    using namespace std;
    
    typedef struct
    {
        int a,b;
        ULL d;
    }edge;
    
    edge g[250000];
    int n,m;
    int fa[501];
    vector<int> vi;
    int check;
    
    bool comp(edge a,edge b)
    {
        return a.d<b.d;
    }
    
    int fi(int x)
    {
        if(fa[x]==x)
        {
            return x;
        }
        else
        {
            return fa[x]=fi(fa[x]);
        }
    }
    
    int MST(bool &nop)
    {
        int i,j,a,b,d,aa,bb;
        ULL ans=0;
        for(i=0;i<=n;i++)
        {
            fa[i]=i;
        }
        for(i=0,j=0;i<n-1;i++)
        {
            for(;j<m;j++)
            {
                if(j==check)
                {
                    continue;
                }
                a=g[j].a;
                b=g[j].b;
                d=g[j].d;
                aa=fi(a);
                bb=fi(b);
                if(aa!=bb)
                {
                    ans+=d;
                    fa[bb]=aa;
                    if(check==m)
                    {
                        vi.push_back(j);
                    }
                    break;
                }
            }
        }
        if(j==m)
        {
            nop=true;
        }
        return ans;
    }
    
    int main()
    {
        cin>>n>>m;
        int i;
        ULL ans=0,hax;
        for(i=0;i<m;i++)
        {
            cin>>g[i].a>>g[i].b>>g[i].d;
        }
        sort(g,g+m,comp);
        check=m;
        bool nop;
        nop=false;
        ans=MST(nop);
        if(nop)
        {
            cout<<"Cost: "<<-1<<endl;
            cout<<"Cost: "<<-1<<endl;
            return 0;
        }
        else
        {
            cout<<"Cost: "<<ans<<endl;
        }
        ans=1e18;
        for(i=vi.size()-1;i>=0;i--)
        {
            check=vi[i];
            nop=false;
            hax=MST(nop);
            if(!nop)
            {
                ans=min(ans,hax);
            }
        }
        if(ans<1e18)
        {
            cout<<"Cost: "<<ans<<endl;
        }
        else
        {
            cout<<"Cost: "<<-1<<endl;
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    113
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    6
    已通过
    1
    上传者