zoukankan      html  css  js  c++  java
  • CF1245D Shichikuji and Power Grid

    思路:

    图论。参考了https://codeforces.com/blog/entry/71080

    实现:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const ll INF = 0x3f3f3f3f3f3f3f3f;
     5 const int N = 2005;
     6 ll x[N], y[N], c[N], k[N];
     7 ll dis(int i, int j)
     8 {
     9     return abs(x[i] - x[j]) + abs(y[i] - y[j]);
    10 }
    11 ll cost(int i, int j)
    12 {
    13     return (k[i] + k[j]) * dis(i, j); 
    14 }
    15 int main()
    16 {
    17     int n;
    18     while (cin >> n)
    19     {
    20         for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
    21         for (int i = 0; i < n; i++) cin >> c[i];
    22         for (int i = 0; i < n; i++) cin >> k[i];
    23         vector<bool> vis(n, false);
    24         vector<int> ch(n, -1);
    25         for (int i = 0; i < n; i++) ch[i] = i;
    26         ll res = 0;
    27         for (int t = 0; t < n; t++)
    28         {
    29             ll minn = INF; int index = -1; 
    30             for (int i = 0; i < n; i++)
    31             {
    32                 if (!vis[i] and c[i] < minn) 
    33                 {
    34                     minn = c[i]; index = i;
    35                 }
    36             }
    37             vis[index] = true;
    38             res += minn;
    39             for (int i = 0; i < n; i++)
    40             {
    41                 if (vis[i]) continue;
    42                 ll tmp = cost(index, i);
    43                 if (tmp < c[i]) { c[i] = tmp; ch[i] = index; }
    44             }
    45         }
    46         cout << res << endl;
    47         vector<int> pow;
    48         vector<pair<int, int>> r;
    49         for (int i = 0; i < n; i++)
    50         {
    51             if (ch[i] == i) pow.push_back(i); 
    52             else r.push_back({i, ch[i]}); 
    53         }
    54         cout << pow.size() << endl;
    55         for (auto it: pow) cout << it + 1 << " ";
    56         cout << endl;
    57         cout << r.size() << endl;
    58         for (auto it: r)
    59         {
    60             cout << it.first + 1 << " " << it.second + 1 << endl;
    61         }
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    模式对象管理
    Oracle数据库实例
    github使用简介
    Oracle数据库安装与连接与简介
    利益相关者分析
    问题账户需求分析
    2018春季学期需求工程概论阅读计划
    JAXB在Java 9/10并且使用Tomcat 9的问题
    mysql 备份 恢复
    IntelliJ IDEA安装bower
  • 原文地址:https://www.cnblogs.com/wangyiming/p/14766754.html
Copyright © 2011-2022 走看看