首页 > 其他分享 >Shichikuji and Power Grid

Shichikuji and Power Grid

时间:2024-11-03 11:20:29浏览次数:1  
标签:ll Power int 点权 maxn Grid Shichikuji 边权

Shichikuji and Power Grid

题意还是很简单,每个点有点权,每个点之间也有边权

求最小生成森林,每个一颗最小生成树的权值等于边权+最小点权

思路

边权我们很好处理,有模板,但如何处理这个点权,便成了主要的问题

如果我们以边权的思路思考点权,那么点权就是某个点从到该点的边权

而我们可以假设0点为这个“某个点”,向每个点建边,那么最终求得的最小生成森林就会因为这个0点,连成一个最小生成树

最后建好边,套模板就可以了

CODE

#include<bits/stdc++.h>

using namespace std;
#define ll long long
#define x first
#define y second

typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
const int maxn=2e3+10;
int cnt=0;
int head[maxn];

struct node{
	int u,v;
	ll w;
	
}e[maxn*maxn];
int c[maxn];
int n;
int k[maxn];
pii p[maxn];
int f[maxn];
vector<int> powerst;
vector<pii> edge;

ll val(int i,int j){
	return (ll)(k[i]+k[j])*(abs(p[i].x-p[j].x)+abs(p[i].y-p[j].y)) ;
} 
int find(int x){
	if(x!=f[x]) return f[x]=find(f[x]);
	return x; 
}
void init(){
	cin>>n;
	for(int i=1;i<=n;++i) cin>>p[i].x>>p[i].y; 
	for(int i=1;i<=n;++i) cin>>c[i],f[i]=i;
	for(int i=1;i<=n;++i) cin>>k[i];
	
	//0点
	for(int i=1;i<=n;++i) {
		e[++cnt].u=0;
		e[cnt].v=i;
		e[cnt].w=c[i];
	}
	//建边
	for(int i=1;i<=n;++i)	
		for(int j=i+1;j<=n;++j){
			e[++cnt].u=i;
			e[cnt].v=j;
			e[cnt].w=val(i,j); 
		}
			
}
bool cmp(node a,node b){
	return a.w<b.w;
}
ll cost=0;
void krus(){
	sort(e+1,e+1+cnt,cmp);
	int tot=0;
	for(int i=1;i<=cnt;++i){
		int u=find(e[i].u);
		int v=find(e[i].v);
		if(u!=v){
			if(e[i].u==0) powerst.push_back(e[i].v);
			else {
				edge.push_back(make_pair(e[i].u,e[i].v));
			}
			f[u]=v;
			cost+=e[i].w;
			if(++tot==n) break;
		}
	}
}
void print(){
	cout<<cost<<endl;
	cout<<powerst.size()<<endl;
	if(!powerst.empty())
		for(auto x:powerst){
			cout<<x<<" ";
		}
	cout<<endl;
	cout<<edge.size()<<endl;
	if(!edge.empty())
		for(auto t:edge){l
			cout<<t.x<<" "<<t.y<<endl;
		}
}
int main(){
	cin.tie(0);cout.tie(0);
	init();
	krus();
	print();
	return 0;
}

小结

这个题关键的是转化点权的思路:点权化为边权

这个思路学会了,可能会在以后的题中可以应用

标签:ll,Power,int,点权,maxn,Grid,Shichikuji,边权
From: https://www.cnblogs.com/guiyou/p/18523035

相关文章

  • 「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
    List和Grid是鸿蒙开发中的核心组件,用于展示动态数据。List适合展示垂直或水平排列的数据列表,而Grid则适用于展示商品或图片的网格布局。本篇将展示如何封装组件,并通过按钮实现布局切换,提升界面的灵活性和用户体验。关键词List组件Grid组件数据展示自定义列......
  • NHE2530FNW PCA, Clusters and Grid
    1HEUNIVERSITYOFHUDDERSFIELDSchoolofComputingandEngineeringASSIGNMENTSPECIFICATIONModuleDetailsModuleCodeNHE2530FNWModuleTitlePCA,ClustersandGridsCourseTitle/sBEng(Hons)ElectronicEngineeringandComputerSystemsAssessmentWeighting,Typ......
  • 界面控件DevExpress WPF中文教程:Data Grid——卡片视图概述
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛 2024 Boao New Pow
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus大会时间:2024年12月8-12月10日大会地点:中国·海南博鳌三、大会介绍2023年3月22日至23日,2023......
  • DevExpress WinForms中文教程:Data Grid - 如何创建未绑定列
    本教程将介绍:在设计时创建未绑定列在设计时为未绑定列指定表达式在运行时编辑表达式向代码中的未绑定列提供数据编辑未绑定列中的单元格值并保存更改P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能......
  • 山海鲸报表PK微软Power BI:企业报表工具哪家更强?
    在当今数据驱动的商业环境中,选择一款合适的报表工具对企业至关重要。山海鲸报表和微软PowerBI都是广受欢迎的报表工具,但两者在功能、用户体验和应用场景上各有不同。那么,在实际使用中,究竟哪款工具更能满足企业需求呢?本文将从操作便捷性、数据处理能力、以及功能灵活性等方面来对......
  • 点云学习笔记2——使用VoxelGrid滤波器进行点云降采样(c++)
    #include<iostream>#include<pcl/point_cloud.h>#include<pcl/io/pcd_io.h>#include<pcl/point_types.h>#include<pcl/filters/voxel_grid.h>#include<pcl/common/common_headers.h>#include<pcl/io/pcd_io.h>#inclu......
  • Windows下使用PowerShell一键SVN迁移至Git脚本
    目录Git和SVN区别Git的服务端与客户端介绍Git客户端与SVN客户端选择迁移前的准备工作迁移脚本本脚本主要参考以下教程Git和SVN区别SVN是集中式的,只有中央仓库。Git是分布式的,有本地和远程两仓库SVN是按照文件存储,允许比较混乱的目录的目录结构,如果迁移前,不整理目录,会......
  • Qt gridLayout布局占两格或两列在ui文件中实现
         在Qt  gridLayou布局里添加一个控件如何设置其占两格或多格   如下图:             一、如果是纯代码编写的界面 (大多是这个方式)     在纯代码编写的界面应用中,可以使用函数QGridLayout::addWidget(QWidget*w,intr......
  • DataGridView控件使用学习
    一、DataGridView控件及元素初始化//DataGridView控件初始化publicSystem.Windows.Forms.DataGridViewdataGridView1;this.dataGridView1=newSystem.Windows.Forms.DataGridView();//DataGridView列初始化publicSystem.Windows.Forms.DataGridViewCheckBoxColumnCol......