zoukankan      html  css  js  c++  java
  • [bzoj3714] [PA2014] Kuglarz(最小生成树)

    我们考虑这个题。。。思路比较神仙。

    就是我们设(sum[i])为前i个的区间里的情况,然后我们知道(sum[j])的话,我们就可以知道(j-i)的情况了

    所以说这很像最小生成树里面的约束条件是吧qwq

    就是不存在环的性质。。。。

    所以我们考虑建图,然后跑最小生成树就可以了。。。。

    然后就是kruskal板子啦qwqwq

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #define MAXN 4000010
    using namespace std;
    int n,cnt,tot;
    int fa[MAXN];
    long long ans;
    struct Node{int x,from,to;}node[MAXN];
    inline int find(int x)
    {
    	if(fa[x]==x) return x;
    	return fa[x]=find(fa[x]);
    }
    bool cmp(Node x,Node y)
    {
    	if(x.x<y.x) return 1;
    	else return 0;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=0;i<n;i++) 
    		for(int j=i+1;j<=n;j++)
    			scanf("%d",&node[++cnt].x),node[cnt].from=i,node[cnt].to=j;
    	for(int i=0;i<=n;i++) fa[i]=i;
    	sort(node+1,node+1+cnt,cmp);
    	for(int i=1;i<=cnt;i++)
    	{
    		int a=find(node[i].from);
    		int b=find(node[i].to);
    		if(a!=b)
    		{
    			fa[a]=b;
    			tot++;
    			ans+=node[i].x;
    		} 
    		if(tot==n) break;
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
  • 相关阅读:
    缓存在高并发场景下的常见问题
    如何提高缓存命中率
    修改或隐藏nginx的版本号
    centos7使用docker安装zabbix
    Handsontable 新增一行 默认值
    java保留有效数字
    Handsontable通用方法
    handsontable插件事件
    handsontable常规配置的中文API
    handsontable的核心方法
  • 原文地址:https://www.cnblogs.com/fengxunling/p/9812432.html
Copyright © 2011-2022 走看看