码迷,mamicode.com
首页 > 其他好文 > 详细

CF1245D Shichikuji and Power Grid

时间:2021-05-24 08:39:17      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:entry   targe   cout   mes   else   ace   typedef   href   return   

思路:

图论。参考了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 }

CF1245D Shichikuji and Power Grid

标签:entry   targe   cout   mes   else   ace   typedef   href   return   

原文地址:https://www.cnblogs.com/wangyiming/p/14766754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!