URAL 1709 Penguin-Avia
2015-10-09 17:16
246 查看
#include <stdio.h> #define MAX_AIRPORTS 100 int numOfAirports; int cancelCost, introduceCost; char airline[MAX_AIRPORTS + 1][MAX_AIRPORTS + 1]; int set[MAX_AIRPORTS + 1]; int rank[MAX_AIRPORTS + 1]; //最小花费很大,注意要用long long才够 long long minCost; void makeSet(){ int airport; for (airport = 0; airport < numOfAirports; airport++){ set[airport] = airport; rank[airport] = 0; } } int findSet(int airport){ if (set[airport] != airport) set[airport] = findSet(set[airport]); return set[airport]; } void unionSet(int one, int another){ if (rank[one] < rank[another]) set[one] = another; else { set[another] = one; if (rank[one] == rank[another]) rank[one]++; } } int main(){ scanf("%d%d%d", &numOfAirports, &cancelCost, &introduceCost); makeSet(); int from, to; for (from = 0; from < numOfAirports; from++) scanf("%s", airline[from]); for (from = 0; from < numOfAirports; from++) for (to = from + 1; to < numOfAirports; to++){ if (airline[from][to] == '1'){ int fromSet = findSet(from); int toSet = findSet(to); if (fromSet != toSet){ unionSet(fromSet, toSet); airline[from][to] = airline[to][from] = '0'; } else { airline[from][to] = airline[to][from] = 'd'; minCost += cancelCost; } } } for (from = 0; from < numOfAirports; from++) for (to = from + 1; to < numOfAirports; to++){ int fromSet = findSet(from); int toSet = findSet(to); if (fromSet != toSet){ unionSet(fromSet, toSet); airline[from][to] = airline[to][from] = 'a'; minCost += introduceCost; } } printf("%lld\n", minCost); for (from = 0; from <= numOfAirports; from++) printf("%s\n", airline[from]); return 0; }
相关文章推荐
- Ural 1910. Titan Ruins: Hidden Entrance
- HDU-1213-How Many Tables
- Longest Consecutive Sequence,Distinct Subsequences,Interleaving String,Scramble String
- SARS病毒传染 并查集
- HDU 1213
- CSU1307 并查集+SPFA
- BestWiring——Kruskal算法&并查集
- 1611:The Suspects
- poj3728
- HDU-1233 还是畅通工程(最小生成树&并查集)
- Simon-【深入理解数据结构】有根树的不同实现① —— 并查集
- 家族
- poj 1417 True Liars 解题报告 并查集 DP
- poj 1161
- URAL - 2018 The Debut Album
- 并查集——HDOJ 1213How Many Tables解题报告
- 最小生成树——HDOJ 2988 Dark roads解题报告
- HDU 1198 Farm Irrigation(并查集)
- hdu 1213 How Many Tables(并查集,简单题)
- hud 1233 还是畅通工程( kruskal和prim两种方法)