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;
}

最新文章

  1. 命令行提交本地项目到github上
  2. Linux下PHP的完全卸载
  3. Sphinx的配置和使用
  4. 为什么eclipse中启动tomcat后,浏览器中出现404?
  5. pt-find 使用实例
  6. iOS开发-Xcode升级后插件失效解决办法
  7. oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
  8. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
  9. tr删除替换详解
  10. JavaScript 高级程序设计(第3版)笔记——chapter4:变量、作用域和内存问题
  11. javamail发送邮件的简单实例(转)
  12. Iterator对对象遍历
  13. PHP读取数据库表显示到前台
  14. Java实现简易联网坦克对战小游戏
  15. LOJ#6285. 数列分块入门 9
  16. ImageMagick - 设置透明带 AlphaChannel 的 png 图片的透明度
  17. 进程池 和 multiprocessing.Pool模块
  18. 初识TypeScript
  19. hdfoo站点开发笔记-2
  20. 初识DOM

热门文章

  1. Django中ORM常用字段及字段参数
  2. IntelliJ IDEA 统一设置编码为utf-8编码
  3. System performance tools
  4. 关于spring中事务管理的几件小事
  5. nodeJS中使用mongoose模块操作mongodb数据库
  6. Java安全停止线程方法
  7. 使用JPA完成增删改查操作
  8. 10_Redis_多数据库
  9. linux(1)
  10. 关于SendMessage和PostMessage的理解的例子