zoukankan      html  css  js  c++  java
  • [LOJ520] 绯色 IOI(开端)- 贪心

    Description

    给定一张无向完全图,每个点给定一个点权,每条边的权值是它连接的两个点的点权的差的平方,求权值和最小的哈密顿回路。

    Solution

    由于哈密顿回路一定经过每一个点,所以每个 (x_i^2) 必定恰好在结果中出现两次,因此我们只需要最小化交叉乘积项,即最大化 (sum x_i x_{i+1}) 即可。

    将所有边权从小到大排序后,显然最终的结果一定是 (x_1x_2+x_1x_3+x_2x_4+x_3x_5+...+x_{n-2}x_n+x_{n-1}x_n)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long 
    const int N = 1000005;
    
    int n,a[N];
    
    signed main()
    {
        ios::sync_with_stdio(false);
        cin>>n;
        int sum=0;
        for(int i=1;i<=n;i++) cin>>a[i], sum+=a[i]*a[i];
        sort(a+1,a+n+1);
        int ans=a[1]*a[2]+a[n-1]*a[n];
        for(int i=1;i+2<=n;i++) ans+=a[i]*a[i+2];
        cout<<2*(sum-ans)<<endl;
        return 0;
    }
    
  • 相关阅读:
    Docker--简介&&安装
    Mycat
    Mysql--主从复制
    Nginx--平滑升级
    Nginx--rewrite
    Nginx--缓存
    Mysql--SQL语句
    Nginx--虚拟主机
    Nginx--反向代理&&负载均衡
    Nginx--用户认证&&访问控制&&限速&&状态访问
  • 原文地址:https://www.cnblogs.com/mollnn/p/13826572.html
Copyright © 2011-2022 走看看