题意

https://vjudge.net/problem/CodeForces-1245D

已知一个平面上有 n 个城市,需要个 n 个城市均通上电

一个城市有电,必须在这个城市有发电站或者和一个有电的城市用电缆相连

在一个城市建造发电站的代价是 c[i]

i和 j 两个城市相连的代价是 k[i]+k[j] 乘上两者的曼哈顿距离

求最小代价的方案

输入:

第一行为城市个数

下面是每个城市的坐标

下面是建造发电站的代价 c[i]

下面是每个城市连线的系数 k[i]

输出:

一个为最小代价

建造发电站的城市数,和每个城市

连线的条数,和每条连线

任意一种即可,输出顺序任意

思路

将所有点两两之间连边,权值为k[i]+k[j] 乘上两者的曼哈顿距离,新建一个点0,其他点和0如果连边说明这个点建发电站。

跑一遍最小生成树即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=2005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
bool vis[N];
int lowc[N],n,pre[N];
ll prim(ll cost[][N])
{
ll ans=0;
memset(vis,false,sizeof(vis));
vis[0]=true;
for(int i=1; i<=n; i++)
{
lowc[i]=cost[0][i];
}
for(int i=1; i<=n; i++)
{
ll minc=1e16;
int p=-1;
for(int j=0; j<=n; j++)
{
if(!vis[j]&&minc>lowc[j])
{
minc=lowc[j];
p=j;
}
}
if(minc==inf) return -1;
ans+=minc;
vis[p]=true;
for(int j=0; j<=n; j++)
{
if(!vis[j]&&lowc[j]>cost[p][j])
lowc[j]=cost[p][j],pre[j]=p;
}
}
return ans;
}
struct node
{
ll x,y,c,k;
} g[N];
ll G[N][N];
int main()
{
std::ios::sync_with_stdio(false);
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>g[i].x>>g[i].y;
}
for(int i=1; i<=n; i++)
cin>>g[i].c;
for(int i=1; i<=n; i++)
cin>>g[i].k;
for(int i=1; i<=n; i++)
{
for(int j=i+1; j<=n; j++)
{
G[i][j]=G[j][i]=(g[i].k+g[j].k)*(abs(g[i].x-g[j].x)+abs(g[i].y-g[j].y));
}
}
for(int i=1; i<=n; i++)
{
G[0][i]=G[i][0]=g[i].c;
}
cout<<prim(G)<<endl;
int cnt=0;
for(int i=1; i<=n; i++)
{
if(pre[i]==0)
cnt++;
}
cout<<cnt<<endl;
for(int i=1; i<=n; i++)
{
if(pre[i]==0)
{
cout<<i<<" ";
}
}
cout<<endl;
cnt=n+1-1-cnt;
cout<<cnt<<endl;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(pre[j]==i||pre[i]==j)
{
cout<<i<<" "<<j<<endl;
}
}
}
return 0;
}

  

CodeForces - 1245D(思维+最小生成树)的更多相关文章

  1. codeforces 1245D(最小生成树)

    题面链接:https://codeforces.com/problemset/problem/1245/D 题意大概是给你一些城市的坐标,可以在城市中建立发电站,也可以让某个城市和已经建好发电站的城市 ...

  2. [Codeforces 1245D] Shichikuji and Power Grid (最小生成树)

    [Codeforces 1245D] Shichikuji and Power Grid (最小生成树) 题面 有n个城市,坐标为\((x_i,y_i)\),还有两个系数\(c_i,k_i\).在每个 ...

  3. CodeForces 76A Gift - 最小生成树

    The kingdom of Olympia consists of N cities and M bidirectional roads. Each road connects exactly tw ...

  4. Codeforces 424A (思维题)

    Squats Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  5. Codeforces 1060E(思维+贡献法)

    https://codeforces.com/contest/1060/problem/E 题意 给一颗树,在原始的图中假如两个点连向同一个点,这两个点之间就可以连一条边,定义两点之间的长度为两点之间 ...

  6. Queue CodeForces - 353D (思维dp)

    https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...

  7. CodeForces 141E: ...(最小生成树)

    [条件转换] 两两之间有且只有一条简单路径<==>树 题意:一个图中有两种边,求一棵生成树,使得这棵树中的两种边数量相等. 思路: 可以证明,当边的权是0或1时,可以生成最小生成树到最大生 ...

  8. UVA1537 Picnic Planning(思维+最小生成树)

    将1号点从图中去掉过后,图会形成几个连通块,那么我们首先可以在这些连通块内部求最小生成树. 假设有\(tot\)个连通块,那么我们会从1号点至少选\(tot\)个出边,使得图连通.这时我们贪心地选择最 ...

  9. codeforces 1244C (思维 or 扩展欧几里得)

    (点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...

随机推荐

  1. mysql数据库相关流程图/原理图

    mysql数据库相关流程图/原理图 1.mysql主从复制原理图 mysql主从复制原理是大厂后端的高频面试题,了解mysql主从复制原理非常有必要. 主从复制原理,简言之,就三步曲,如下: 主数据库 ...

  2. 如何用css实现弧度圆角?三角形以及圆形

    用css画矩形圆角 ,需要使用到border-radius这个属性,下图四角圆,代码显示如下:border-radius:60px; width:360px; height:200px; border ...

  3. Codeforces Round #601 (Div. 2)

    传送门 A. Changing Volume 签到. Code /* * Author: heyuhhh * Created Time: 2019/11/19 22:37:33 */ #include ...

  4. 一天两道PAT(1)

    其实是从昨天开始刷的,备战一下PAT(乙级,菜鸡不解释,希望几个月下来能有长进吧),做了一下,发现自己的算法功底好差啊..... 先上题目 1. 字符串中必须仅有P, A, T这三种字符,不可以包含其 ...

  5. Java程序猿想要月薪2万+必须必备哪些技术?

    现在程序员是比较紧俏的一个岗位,其实可以写代码的人许多,但是为什么程序员还那么缺呢? 除了需求大以外,还有一个原因就是,实在合格的程序员确实比较少. 想要成为一个合格的程序员,咱们需求满意以下几点要求 ...

  6. Python进阶小结

    目录 一.异常TODO 二.深浅拷贝 2.1 拷贝 2.2 浅拷贝 2.3 深拷贝 三.数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字符串类型内置方法 3 ...

  7. Zotero入门精通

    一.Zotero简介 Zotero作为一款协助科研工作者收集.管理以及引用研究资源的免费软件,如今已被广泛使用.此篇使用说明主要分享引用研究资源功能,其中研究资源可以包括期刊.书籍等各类文献和网页.图 ...

  8. Java连载43-访问静态方法其他注意事项、static关键字

    一.其他注意点 1.对于带有static的方法,我们讲过需要用“类名.”的方式进行访问,但是其实我们使用“引用.”的方式也是可以进行访问这个方法的举例. package com.bjpowernode ...

  9. 现象:SpringApplication.run后面的语句未执行

    下面的两种情况下,红色的log.info中的内容一直没有执行,和预期不符. 看来,需要在@PostConstruct修饰的函数.CommandLineRunner的run方法中调用 另外的线程 来执行 ...

  10. Luogu P3600 随机数生成器

    Luogu P3600 随机数生成器 题目描述 sol研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数. 现在sol打算生成\(n\)个\([1,x]\)的整数\(a_1...a_n\) ...