zoukankan      html  css  js  c++  java
  • Codeforces Round #597 (Div. 2)D(最小生成树)

    /*每个点自己建立一座发电站相当于向超级源点连一条长度为c[i]的边,连电线即为(k[i]+k[j])*两点间曼哈顿距离,跑最小生成树(prim适用于稠密图,kruscal适用于稀疏图)*/

    #define HAVE_STRUCT_TIMESPEC
    #include<bits/stdc++.h>
    using namespace std;
    int fa[2007];
    int x[2007],y[2007];
    int c[2007],k[2007];
    long long m[2007][2007];
    vector<pair<long long,pair<int,int> > >edge;
    vector<int>ans_point;
    vector<pair<int,int> >ans_edge;
    int fi(int x){
    return fa[x]==x?x:fa[x]=fi(fa[x]);
    }
    int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n;
    cin>>n;
    for(int i=1;i<=n;++i)
    cin>>x[i]>>y[i];
    for(int i=1;i<=n;++i)
    cin>>c[i];
    for(int i=1;i<=n;++i)
    cin>>k[i];
    for(int i=1;i<=n;++i){
    m[0][i]=c[i];
    fa[i]=i;
    edge.push_back({c[i],make_pair(0,i)});
    }
    for(int i=1;i<=n;++i){
    for(int j=i+1;j<=n;++j){
    long long tamp=1ll*(k[i]+k[j])*(abs(x[i]-x[j])+abs(y[i]-y[j]));
    edge.push_back({tamp,make_pair(i,j)});
    }
    }
    sort(edge.begin(),edge.end());
    long long ans=0;
    for(int i=0;i<edge.size();++i){
    long long tamp=edge[i].first;
    int x=edge[i].second.first;
    int y=edge[i].second.second;
    if(fi(x)==fi(y))
    continue;
    ans+=tamp;
    if(!x)
    ans_point.push_back(y);
    else
    ans_edge.push_back({x,y});
    fa[fi(y)]=x;
    }
    cout<<ans<<" ";
    cout<<ans_point.size()<<" ";
    for(int i=0;i<ans_point.size();++i)
    cout<<ans_point[i]<<" ";
    cout<<" ";
    cout<<ans_edge.size()<<" ";
    for(int i=0;i<ans_edge.size();++i)
    cout<<ans_edge[i].first<<" "<<ans_edge[i].second<<" ";
    return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    计算机中丢失OPENGL.dll
    BAT或赌在当下或押在未来,谁是王者?
    singleton
    计算机原理扫盲
    汇编扫盲
    sublime text 3 使用过程总结记录
    sublime text3侧边栏主题不生效问题解决
    atom初体验
    Sublime Text 3 快捷键总结
    微信后台开发第一步:nodeJS+express接入微信后台详细教程
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11832582.html
Copyright © 2011-2022 走看看