• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
镂空的行尸
   首页       联系   管理    订阅  订阅

Abandoned country(最小生成树+树形DP)

#include<bits/stdc++.h>
using namespace std;

struct node{
    int u, v, w, nex;
    bool gone;

    node(){}
    node(int a,int b,int c){
        u = a;v = b;w = c;gone = false;
    }
    bool operator <(const node&a)const{
        return w < a.w;
    }
};
const int maxE = 1000100;
const int maxP = 100010;
node Gra[maxE];
int dp[maxP], F[maxP];
int T,n,m;
long long ans;
double edgeSum;
vector<pair<int, int> >mp[maxP];

int Find(int x){
    if(F[x] == x) return x;
    return F[x] = Find(F[x]);
}

void init(int nn){
    for(int i = 0; i <= nn; i ++){
        F[i] = i;
        mp[i].clear();
    }
    edgeSum = 0;
    ans = 0;
}

int dfs(int rt, int no){
    int point = 1;
    for(int i = mp[rt].size() - 1; i >=0; i --){
        int to = mp[rt][i].first;
        int w = mp[rt][i].second;
        if(to == no) continue;
        point += dfs(to, rt);
        double temp = ((double)dp[to] * (double)(n - dp[to]) * w);
        edgeSum += temp;
    }
    dp[rt] = point;
    return point;
}

int main(){
    int w,v,u;scanf("%d",&T);
    while(T --){
        scanf("%d%d",&n,&m);
        init(n);
        for(int i = 0; i < m; i ++){
            scanf("%d%d%d",&Gra[i].u,&Gra[i].v,&Gra[i].w);
        }
        sort(Gra, Gra + m);
        for(int i = 0; i < m; i ++){
            u = Gra[i].u;v = Gra[i].v;w = Gra[i].w;
            int fina = Find(u), finb = Find(v);
            if(fina != finb){
                F[fina] = finb;
                ans = ans + w;
                mp[u].push_back(make_pair(v,w));
                mp[v].push_back(make_pair(u,w));
            }
        }
        dfs(1, 1);
        printf("%lld %.2lf\n",ans,edgeSum*2.0/n/(n - 1));
    }
    return 0;
}

 

more crazy more get!
posted @ 2018-09-30 00:45  镂空的行尸  阅读(119)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3