Processing math: 100%

BZOJ3714: [PA2014]Kuglarz

BZOJ3714: [PA2014]Kuglarz

https://lydsy.com/JudgeOnline/problem.php?id=3714

分析:

  • 询问lr转化成l1r
  • 新加一个0,把询问看成连边就是要求一棵最小生成树。
  • prim即可

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <set>
#include <vector>
#include <cmath>
using namespace std;
#define N 2050
typedef long long ll;
int n,a[N][N];
char buf[100000],*p1,*p2;
int dis[N],vis[N];
ll ans;
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rd() {
	int x=0; char s=nc();
	while(s<'0') s=nc();
	while(s>='0') x=(((x<<2)+x)<<1)+s-'0',s=nc();
	return x;
}
int main() {
	n=rd();
	int i,j;
	for(i=1;i<=n;i++) {
		for(j=i;j<=n;j++) {
			a[i-1][j]=rd(); a[j][i-1]=a[i-1][j];
		}
		dis[i]=0x3f3f3f3f;
	}
	int x=0,nxt=0;
	vis[0]=1;
	for(i=1;i<=n;i++) {
		nxt=0;
		for(j=1;j<=n;j++) {
			if(!vis[j]) {
				dis[j]=min(dis[j],a[x][j]);
				if((!nxt)||dis[j]<dis[nxt]) nxt=j;
			}
		}
		x=nxt; ans+=dis[x]; vis[x]=1;
	}
	printf("%lld\n",ans);
}
posted @   fcwww  阅读(171)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示