记录编号 234212 评测结果 AAAAAAAAAA
题目名称 读书 最终得分 100
用户昵称 GravatarSky_miner 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2016-03-07 16:02:08 内存使用 0.29 MiB
显示代码纯文本
  1. #include<cstdio>
  2. using namespace std;
  3. const int maxn = 100 + 10 ;
  4. struct Node{
  5. int root;
  6. int time;
  7. bool key;
  8. }G[maxn];
  9. int ans;
  10. int find(const int x){
  11. if( G[x].root != x){
  12. int r = G[x].root;
  13. G[x].root = find(G[x].root);
  14. if( G[x].key ) {
  15. G[x].time = G[x].time>>1 ;
  16. G[x].key = false ;
  17. }
  18. }
  19. return G[x].root;
  20. }
  21. void work(const int &x,const int &y ){
  22. int rx = find(x);
  23. int ry = find(y);
  24. if( rx != ry ){
  25. if(G[rx].time > G[ry].time ){
  26. G[rx].root = ry;
  27. ans-=G[rx].time - (G[rx].time>>1);
  28. G[rx].time = G[rx].time>>1;
  29. G[rx].key = false;
  30. }
  31. else{
  32. G[ry].root = rx;
  33. ans-=G[ry].time - (G[ry].time>>1);
  34. G[ry].time = G[ry].time>>1;
  35. G[ry].key = false;
  36. }
  37. }
  38. }
  39. int main(){
  40. int n,m;
  41. #define Work
  42. #ifdef Debug
  43. freopen("C://Users//Administrator//Documents//test_in.txt","r",stdin);
  44. freopen("C://Users//Administrator//Documents//test_out.txt","w",stdout);
  45. #endif
  46. #ifdef Work
  47. freopen("reading.in","r",stdin );
  48. freopen("reading.out","w",stdout);
  49. #endif
  50. while(scanf("%d%d",&n,&m) == 2 && ( m!=0 || n!=0 ) ){
  51. ans = 0;
  52. for(int i=1;i<=n;i++){
  53. G[i].root = i;
  54. scanf("%d",&G[i].time);
  55. ans+= G[i].time;
  56. G[i].key = true ;
  57. }
  58. int u,c;
  59. //printf("--------->%d\n",m);
  60. for(int i=1;i<=m;i++){
  61. scanf("%d%d",&u,&c);
  62. work(u+1,c+1);
  63. }
  64. printf("%d\n",ans);
  65. }
  66. return 0;
  67. }