Shichikuji and Power Grid

D. Shichikuji and Power Grid

参考:Codeforces Round #597 (Div. 2)

思路:一个很裸的最小生成树。把建立基站看成是,城市与源点(虚构的)建边。由此建立最小生成树,即可得出答案。

代码:

// Created by CAD on 2019/11/2.
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;

const int maxn=2020*2000;
struct edge{
    ll u,v;
    ll w;
    bool operator<(edge &e)
    {
        return w<e.w;
    }
}e[maxn];
ll fa[2005],x[2005],y[2005],c[2005],k[2005];
int n;
vector<int> out1;
vector<pii> out2;
int find(int i)
{
    return i==fa[i]?i:fa[i]=find(fa[i]);
}
int cnt=0;
int cnt1=0;
ll kruskal()
{
    ll ans=0;
    for(int i=0;i<=n;++i)
        fa[i]=i;
    for(int i=1;i<=cnt;++i)
    {
        int u=find(e[i].u),v=find(e[i].v);
        if(u!=v)
        {
            ans+=e[i].w,fa[v]=u;
            if(!e[i].u) out1.push_back(e[i].v);
            else out2.push_back({e[i].u,e[i].v});
        }
    }
    return ans;
}
int main()
{
//    FOPEN;
    ios::sync_with_stdio(false);
    cin.tie(0);
    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)
        e[++cnt]=edge{0,i,c[i]};
    for(int i=1;i<=n;++i)
        for(int j=i+1;j<=n;++j)
            e[++cnt]=edge{i,j,1ll*(abs(x[i]-x[j])+abs(y[i]-y[j]))*(k[i]+k[j])};
    sort(e+1,e+cnt+1);
    cout<<kruskal()<<endl;
    cnt1=out1.size();
    cout<<cnt1<<endl;
    for(int i=0;i<cnt1-1;++i)
        cout<<out1[i]<<" ";
    if(cnt1)
    cout<<out1[cnt1-1]<<endl;
    cout<<out2.size()<<endl;
    for(auto i:out2)
        cout<<i.first<<" "<<i.second<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/CADCADCAD/p/11782455.html

时间: 2024-10-08 09:34:28

Shichikuji and Power Grid的相关文章

CF1245D: Shichikuji and Power Grid

CF1245D: Shichikuji and Power Grid 题意描述: 给定\(n\)个点\((n\leq2000)\),在第\(i\)个点上建立一个基站需要\(c_i\)的代价,连接两个点需要\((|x_i-x_j|+|y_i-y_j|)*(k_i+k_j)\)的代价.对于一个点要么建立基站,要么连接建立基站的点.问最小代价是多少,同时输出建立基站的点和线路. 思路: 建立一个超级根,对于每个城市建立发电站,连接一条权值为\(c_i\)的边,再把每个城市之间连接电线的花费算出来,跑\

Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid

题意: 二维平面上n个点,每个点可以建厂,也可以与其他点连边,建厂花费为\(c_i\),与j连边花费为\((k_i+k_j)*dis(i,j)\),dis为两点之间的欧式距离,求让每个点都通电的最小花费与方案 思路: 维护使这个点通电的花费的优先队列,一开始先把建厂放进去,然后每次拿出最小花费的点i,再用i去更新与i建路的花费(有点像最小生成树). #include<bits/stdc++.h> #define ll long long #define pii pair<int,int&

CodeForces 1245D Shichikuji and Power Grid

cf题面 解题思路 比赛过程中想了一个贪心--把所有城市按照自建代价排序,排在第一的城市肯定自建,之后依次判断排在后面的城市要自建还是要连接前面的.这么做WA13了(第一次忘开long longWA4). 赛后看看题解,又参考了之前同样WA13的 Artoriax的代码,大概发现了这种做法的漏洞.假设自建代价是\(c_1<c_2<c_3\),可以构造连边的代价,使得在花费最小的连接方式中,连边应该是1-3-2,我之前那样的做法,1号城市自建以后,判断2号城市要自建还是要连1号城市,再判断3号城

codeforces Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid

#include<bits/stdc++.h> using namespace std ; int n; struct City { int id; long long x,y; //坐标 long long cc,kk; //自建的花费,连线的花费 bool self;//是否建站 int fa;//连线的站 bool operator < (const City & a)const { return cc<a.cc; } } c[2005]; int main() {

codeforces - 1245 (div2)

A - Good ol' Numbers Coloring 直接判断两个数是否互质 #include <stdio.h> #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <stack> #pragma GCC optimize(2) #define mm(i,v) m

APL: ANSYS Power Library

1. creating accurate switching current waveforms (profiles) 2.output-state dependent decoupling capacitance (intrinsic decapacitance) 3. equivalent power circuit resistance (ESR effective series resistance) 4.switching delay 5.leakage current Design

CURRICULUM VITAE

Dr.  YUE  XIAO Professor National Key Lab of Communication Science and Technology on Communications University of Electronic Science and Technology of China (UESTC) No.2006, Xiyuan Ave, West Hi-Tech Zone, Chengdu, 611731, P.R.China Email: [email prot

2017年世界500强榜单,500强亏损公司,强最赚钱的50家公司

2017年世界500强榜单发布:腾讯阿里首次登榜 2017年07月20日 20:03:51 财富中文网于北京时间2017年7月20日晚与全球同步发布了最新的<财富>世界500强排行榜. 沃尔玛连续四年排名第一位,2016年营业收入达4,858.7亿美元,同比提升0.8%.前三阵营中的其它两家为中国公司--国家电网和中石化.中石油和丰田汽车分列第四和第五.唯一新进入前十阵营的是沃伦巴菲特掌管的保险和投资集团伯克希尔-哈撒韦公司.如今伯克希尔收入中近四分之三来自经营业务而非财务投资,在挣脱巴菲特光

安全专家发现GE Multilin SR的一个关键漏洞对全球电网构成严重威胁。

A team of researchers from New York University has found a serious vulnerability in some of GE Multilin SR protection relays that poses a serious threat to power grid. 来自纽约大学的一组研究人员发现一些GE Multilin SR保护继电器存在严重的漏洞,对电网构成严重威胁. The experts will provide fu