• Battle Over Cities Hard Version


    1001 Battle Over Cities - Hard Version

    思路:暴力跑每一个点作为被侵略点的情况,求最小生成树即可。

    需要注意的情况是,虽然题目说最一开始的时候图是联通的,但是要注意,当一个点被侵略的时候,图可能就不连通了,所以需要判定一下,不连通的情况置为 inf

    // Created by CAD on 2021/5/18.
    #include <bits/stdc++.h>
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define pii pair<int,int>
    using namespace std;
    
    const int maxn=6e6+5;
    struct edge{
        int u,v,w;
        bool operator <(edge &e){
            return w<e.w;
        }
    }e[maxn];
    int f[505];
    int find(int x){
        return f[x]==x?x:f[x]=find(f[x]);
    }
    int n,m;
    vector<pii> ans;
    void solve(int x){
        for(int i=1;i<=n;++i)
            f[i]=i;
        int cnt=0,sum=0;
        for(int i=1;i<=m;++i){
            int u=e[i].u,v=e[i].v,w=e[i].w;
            if(u==x||v==x||find(u)==find(v)) continue;
            cnt++,sum+=w,f[find(u)]=find(v);
        }
        if(cnt<n-2) sum=inf;
        if(ans.empty()) ans.emplace_back(x,sum);
        else {
            if(ans[0].se>sum) return ;
            if(ans[0].se<sum) ans.clear();
            ans.emplace_back(x,sum);
        }
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>m;
        for(int i=1;i<=m;++i){
            int u,v,w,t;cin>>u>>v>>w>>t;
            e[i]={u,v,(t==0)?w:0};
        }
        sort(e+1,e+m+1);
        for(int i=1;i<=n;++i)
            solve(i);
        if(ans.empty()||ans[0].se==0) cout<<0<<endl;
        else{
            for(int i=0;i<ans.size();++i){
                cout<<ans[i].fi<<" \n"[i==ans.size()-1];
            }
        }
        return 0;
    }
    
    CAD加油!欢迎跟我一起讨论学习算法,QQ:1401650042
  • 相关阅读:
    框架Frameset 的JS 跳转 刷新 [转]
    Javascript的变量与delete操作符
    字符串替换方法的优劣
    Nutch介绍(译)
    权限系统—数据授权模型
    Apache Synapse介绍(译)
    java动态代理
    ASM简介
    maven使用技巧——构件搜索
    springSecurity源码分析——org.springframework.security.web.FilterInvocation类
  • 原文地址:https://www.cnblogs.com/cader/p/14781419.html
Copyright © 2020-2023  润新知