zoukankan      html  css  js  c++  java
  • 【bzoj1232】[Usaco2008Nov]安慰奶牛cheer(最小生成树)

      题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1232

      这道题要保留的道路肯定是原图的一棵生成树,因为要保留n-1条边,且使删边后的图连通。但是这个图不能直接求最小生成树,因为还要考虑点权(即每头奶牛需要安慰的时间)的影响。

      但是我们可以发现删边后的图,每条边必须走两次,一次过去一次回来。而且从每条边走过去、走回来时需要额外花费这条边两个端点的点权。所以,走每条边实际的花费=该边边权*2+两个端点点权之和。然后就可以愉快的跑最小生成树了。

      但是,你早上起来还要额外安慰你住的牧场的奶牛一次,所以还需要找个花费最小的牧场住在那,答案加上该点点权。

      代码:

    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<ctime>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<map>
    #define ll long long
    #define ull unsigned long long
    #define max(a,b) (a>b?a:b)
    #define min(a,b) (a<b?a:b)
    #define lowbit(x) (x& -x)
    #define mod 1000000000
    #define inf 0x3f3f3f3f
    #define eps 1e-18
    #define maxn 510
    inline ll read(){ll tmp=0; char c=getchar(),f=1; for(;c<'0'||'9'<c;c=getchar())if(c=='-')f=-1; for(;'0'<=c&&c<='9';c=getchar())tmp=(tmp<<3)+(tmp<<1)+c-'0'; return tmp*f;}
    inline ll power(ll a,ll b){ll ans=1; for(;b;b>>=1){if(b&1)ans=ans*a%mod; a=a*a%mod;} return ans;}
    inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
    inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
    using namespace std;
    struct data{
        int x,y,d;
    }e[100010];
    int a[10010],fa[10010];
    int n,m;
    bool cmp(data a,data b){return a.d<b.d;}
    int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
    int main()
    {
        n=read(); m=read();
        for(int i=1;i<=n;i++)a[i]=read();
        for(int i=1;i<=m;i++){
            int x=read(),y=read(),d=read();
            e[i].x=x; e[i].y=y; e[i].d=2*d+a[x]+a[y];
        }
        sort(e+1,e+m+1,cmp);
        for(int i=1;i<=n;i++)fa[i]=i;
        ll ans=0;
        for(int i=1;i<=m;i++){
            int fx=find(e[i].x),fy=find(e[i].y);
            if(fx!=fy)ans+=e[i].d,fa[fx]=fy;
        }
        int mn=inf;
        for(int i=1;i<=n;i++)
            mn=min(mn,a[i]);
        printf("%lld
    ",ans+mn);
    }
    bzoj1232
  • 相关阅读:
    在一个tomcat中配置多个tomcat服务器 111
    同一个tomcat部署多个项目11
    Tomcat部署多个项目及相关配置
    同一个tomcat部署多个项目
    Tomcat下部署多个项目
    Linux环境下在Tomcat上部署JavaWeb工程
    Linux命令详解之—pwd命令
    PWD
    C语言内存分配
    每天小练笔10-小和尚挑水(回溯法)
  • 原文地址:https://www.cnblogs.com/quzhizhou/p/9435205.html
Copyright © 2011-2022 走看看