Roads and Libraries HackerRank
来源:互联网 发布:apache tomcat 7.0 7.0 编辑:程序博客网 时间:2024/06/07 07:50
The Ruler of HackerLand believes that every citizen of the country should have access to a library. Unfortunately, HackerLand was hit by a tornado that destroyed all of its libraries and obstructed its roads! As you are the greatest programmer of HackerLand, the ruler wants your help to repair the roads and build some new libraries efficiently.
HackerLand has cities numbered from to . The cities are connected by bidirectional roads. A citizen has access to a library if:
- Their city contains a library.
- They can travel by road from their city to a city containing a library.
The following figure is a sample map of HackerLand where the dotted lines denote obstructed roads:
The cost of repairing any road is dollars, and the cost to build a library in any city is dollars.
You are given queries, where each query consists of a map of HackerLand and value of and .
For each query, find the minimum cost of making libraries accessible to all the citizens and print it on a new line.
Input Format
The first line contains a single integer, , denoting the number of queries. The subsequent lines describe each query in the following format:
- The first line contains four space-separated integers describing the respective values of(the number of cities), (the number of roads), (the cost to build a library), and (the cost to repair a road).
- Each line of the subsequent lines contains two space-separated integers, and , describing a bidirectional road connecting cities and .
Constraints
- Each road connects two distinct cities.
Output Format
For each query, print an integer denoting the minimum cost of making libraries accessible to all the citizens on a new line.
Sample Input
23 3 2 11 23 12 36 6 2 51 33 42 41 22 35 6
Sample Output
412
Explanation
We perform the following queries:
HackerLand contains cities connected by bidirectional roads. The price of building a library is and the price for repairing a road is .
The cheapest way to make libraries accessible to all is to:
- Build a library in city at a cost of .
- Repair the road between cities and at a cost of .
- Repair the road between cities and at a cost of .
This gives us a total cost of . Note that we don't need to repair the road between cities and because we repaired the roads connecting them to city !
In this scenario it's optimal to build a library in each city because the cost of building a library () is less than the cost of repairing a road ().
There are cities, so the total cost is .
这个题的大概意思是,让各个城市的人都能到图书馆,有两种方案,该城市有图书馆或者与该城市联通的城市有图书馆,已知图书馆的造价和修路的价格给出m条路,没联通城市默认修图书馆,求最少要用多少钱
路的条数加上图书馆的个数>=城市个数所以当图书馆造价比修路所需钱少的时候直接在每个城市修一个图书馆是最佳方案。
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>using namespace std;long long int s[999999];long long f(long long x)//查找根节点{ if(x == s[x]) return x; else { s[x] = f(s[x]); return s[x]; }}int main(){ long long int q, i, n, m, l, r, cl, cr, sum, mon, x, y; cin>>q; while(q--) { sum = 0; mon = 0; cin>>n>>m>>cl>>cr; for(i = 1;i <= n;i++) s[i] = i; for(i = 0;i < m;i++) { cin>>l>>r; x = f(l); y = f(r); if(x != y) s[y] = s[x]; } if(cl <= cr)//修图书馆的价格比修路价格低的时候直接修图书馆。 mon = cl * n; else { for(i = 1;i <= n;i++)//标记与下表相同的城市个数等于,连通图的个数 { if(s[i] == i) sum++; } mon = cr * (n - sum) + sum * cl; } cout<<mon<<endl; } return 0;}
- Roads and Libraries HackerRank
- hackerrank Roads and Libraries(DFS/并查集)
- Roads and Libraries
- Roads and Libraries
- Roads and Libraries(最小生成树)
- 并查集( Roads and Libraries locked)
- Hackerrank Sherlock and Squares
- [hackerrank]Bob and Ben
- Hackerrank Sherlock and The Beast
- hackerrank-----Bear and Steady Gene
- HackerRank: Sam and sub-strings
- [hackerrank]Unique Divide And Conquer
- C++ HackerRank|AND xor OR
- hackerRank
- HackerRank
- HackerRank
- HackerRank
- HackerRank
- 嵌入式linux上Google breakpad编译使用
- js sort 数组排序
- 【jQuery源码浅析】(一)--整体架构
- jQuery
- 字对齐、半字对齐、字节对齐的理解(转载)
- Roads and Libraries HackerRank
- Hashtable类注释翻译、源码分析
- Global系列内存管理函数
- hive数据迁移 导表
- 列表和字符串互相转换的应用
- win10 anaconda tensorflow环境配置
- Matlab数字图像亮度变换函数
- 2017/6/24.25作业
- Java web简单的注册功能实现