自出题,写题解《招募士兵》
来源:互联网 发布:linux pe结构 编辑:程序博客网 时间:2024/05/16 01:02
招募士兵
(conscription.pas/c/cpp)
【问题描述】
小W拥有一个国家,现在他希望建立一支军队来保护他的国家。他选中了N个女孩和M个男孩希望招募他们成为他的士兵。在没有任何先决条件的情况下,他招募一个士兵需要花费10000RMB。现在小W可以利用这些人之间的关系来减少他的花费。如果女孩X和男孩Y存在有一个关系值D(两人之间可能有多个关系值),而且她们之中有一个人被招募了。那么小W可以在招募另一个人的时候减少D的花费(实际10000-D的费用)。
现在给你这些男孩女孩之间的关系,希望你告诉小W告诉他招募所有人的最少花费。
注意:招募某一个人时,只能利用一个关系。
【输入】
输入文件conscription.in中文件第一行包含三个整数N,M,R。表示N个女孩,M个男孩与R条关系。
接下来R行,每行包含三个整数Xi,Yi和Di,表示女孩Xi和男孩Yi有Di的关系。
【输出】
conscription.out中只有一行一个数,为最小费用。
【输出样例】
5 5 8
4 3 6831
1 3 4583
0 0 6592
0 1 3063
3 3 4975
1 3 2049
4 2 2104
2 2 781
【输出样例】
71071
【数据说明】
100%的数据:1<=N, M <=100000,0 <=R <=200,000,0 < di < 10000
本题烤驴到一个并查集的问题,然后,我们把他可以减少的价钱排个序,再一个一个地去并起来,如果他们的father一样,就不可以并起来,这样子就能解决问题。
参考程序:
type new=record x:longint; y:longint; r:longint; bz:boolean; end;var i,j,k,l,n,m,r,v,x,y:longint; ans:int64; f:array[0..200000] of longint; a:array[1..200000] of new; bz:boolean;procedure qs(l,r:longint);var i,j,m:longint; t:new;begin i:=l; j:=r; m:=a[(l+r) div 2].r; repeat while a[i].r>m do inc(i); while a[j].r<m do dec(j); if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); end; until i>j; if l<j then qs(l,j); if i<r then qs(i,r);end;function zs(t:longint):longint;var i,j,k,l:longint;begin l:=t; while f[t]<>t do begin t:=f[t]; end; while f[l]<>t do begin j:=f[l]; f[l]:=t; l:=j; end; zs:=t;end;begin readln(n,m,r); for i:=1 to r do begin readln(a[i].x,a[i].y,a[i].r); a[i].y:=a[i].y+n; end; for i:=1 to n+m do f[i]:=i; qs(1,r); ans:=0; v:=0; for i:=1 to r do begin if zs(a[i].x)<>zs(a[i].y) then begin x:=zs(a[i].x); y:=zs(a[i].y); f[x]:=y; a[i].bz:=true; ans:=ans+(10000-a[i].r); inc(v); end; end; writeln(ans+(n+m-v)*10000);end.
- 自出题,写题解《招募士兵》
- 出题&题解
- 出题&题解 2
- 出题&题解4
- POJ 3723 Conscription【招募士兵】
- 遗传学自出题
- 遗传学自出题答案
- 【集训队出题2011】大楼 题解
- POJ3723 招募士兵[最小生成树]
- 出题
- 【BZOJ】【P3203】【Sdoi2013】【保护出题人】【题解】【凸包+三分】
- BestCoder Round92 出题人之 题解报告与代码 ^_^
- BZOJ 1458: 士兵占领 最大流 题解
- [最大流] BZOJ 1458: 士兵占领 题解
- 【BZOJ】【P3265】【志愿者招募加强版】【题解】【单纯形法】
- 自实现 IOC, 参考 马士兵
- Club 限时招募海盗,会写 Android 的海盗!
- 3月12日训练赛题解(大工软院出题)
- Logstash学习8_分布式日志收集之Logstash 笔记(二)
- 备忘录模式(17)
- 平衡二叉查找树(JAVA)
- KMP
- Java 并发:Lock 框架详解
- 自出题,写题解《招募士兵》
- Gradle编译java,Eclipse项目以及遇到的问题
- STM32F10X的USB固件库说明
- JAVA 比较两张图片的相似度的代码
- 项目里使用MVP和Dagger的有福了!!!绝对提升效率
- 上到99,下到刚会打篮球,请学习下面的Java
- 手动加载spring, ApplicationContext怎么销毁
- leecode 解题总结:55. Jump Game
- 设计模式之——观察者模式(二)