BZOJ 3714 PA 2014 Kuglarz 最小生成树
2014-11-04 19:52
148 查看
题目大意:桌面上倒扣着一些杯子,在这些杯子的有一些杯子底下有小球。可以询问i到j号杯子下面共有多少个小球的奇偶性,花费c[i][j],问至少花费多少可以得知杯子下面小球的存在情况。
思路:看这个题怎么看怎么想小胖的奇偶,其实是一样的,只不过这个题是利用了那个题的结论。没做过的可以先做做那个题,用并查集维护一下。那么这个题就很裸了,只是一个最小生成树的过程。
CODE:
思路:看这个题怎么看怎么想小胖的奇偶,其实是一样的,只不过这个题是利用了那个题的结论。没做过的可以先做做那个题,用并查集维护一下。那么这个题就很裸了,只是一个最小生成树的过程。
CODE:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 2010 using namespace std; struct Edge{ int x,y,length; Edge(int _ = 0,int __ = 0,int ___ = 0):x(_),y(__),length(___) {} bool operator <(const Edge &a)const { return length < a.length; } }edge[MAX * MAX]; int cnt,total; int father[MAX]; int Find(int x) { if(father[x] == x) return x; return father[x] = Find(father[x]); } int main() { cin >> cnt; for(int i = 1; i <= cnt + 1; ++i) father[i] = i; for(int i = 1; i <= cnt; ++i) for(int z,j = i; j <= cnt; ++j) { scanf("%d",&z); edge[++total] = Edge(i,j + 1,z); } sort(edge + 1,edge + total + 1); long long ans = 0,t = 0; for(int i = 1; i <= total; ++i) { int fx = Find(edge[i].x); int fy = Find(edge[i].y); if(fx != fy) { father[fy] = fx; ans += edge[i].length; if(++t == cnt) break; } } cout << ans << endl; return 0; }
相关文章推荐
- BZOJ 3714 [PA2014]Kuglarz - 最小生成树模型
- 【BZOJ3714】[PA2014]Kuglarz 最小生成树
- bzoj 3714: [PA2014]Kuglarz 最小生成树
- 3714: [PA2014]Kuglarz 思路题 最小生成树
- 【BZOJ 4144】[AMPPZ2014]Petrol 最短路+最小生成树
- bzoj 3714: [PA2014]Kuglarz【最小生成树】
- 【BZOJ】【P3714】【PA2014】【Kuglarz】【题解】【最小生成树】
- 【BZOJ3479】[Usaco2014 Mar]Watering the Fields【最小生成树】
- bzoj 3479: [Usaco2014 Mar]Watering the Fields 最小生成树
- BZOJ 3479: [Usaco2014 Mar]Watering the Fields(最小生成树)
- BZOJ 4144: [AMPPZ2014]Petrol 最短路+最小生成树+倍增
- bzoj 4144: [AMPPZ2014]Petrol spfa+最小生成树
- 【BZOJ3714】【PA2014】Kuglarz(最小生成树)
- BZOJ3714 [PA2014]Kuglarz 【最小生成树】
- [BZOJ3669]NOI2014魔法森林|LCT|最小生成树
- bzoj 4144 [AMPPZ2014]Petrol 最短路+最小生成树+倍增
- 最小生成树 BZOJ3714 [PA2014]Kuglarz
- BZOJ4144 [AMPPZ2014]Petrol 【最短路 + 最小生成树】
- BZOJ 3714: [PA2014]Kuglarz(最小生成树)
- 【BZOJ3714】【PA2014】Kuglarz(最小生成树)