260D - Black and White Tree

思路:把两种颜色先按值sort一下,最小值肯定是叶子,然后把这个叶子和另外一中颜色的一个最小值的节点连接起来,再把这个节点变成叶子,把值减掉就可以了。

如下图:

代码1

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e5+;
  4. struct node
  5. {
  6. int val,id;
  7. bool operator <(node &a)
  8. {
  9. return val<a.val;
  10. }
  11. }a[N],b[N];
  12. int main()
  13. {
  14. int n;
  15. int c1=,c2=;
  16. int col,val;
  17. cin>>n;
  18. for(int i=;i<=n;i++)
  19. {
  20. cin>>col>>val;
  21. if(col)
  22. {
  23. b[c2].id=i;
  24. b[c2++].val=val;
  25. }
  26. else
  27. {
  28. a[c1].id=i;
  29. a[c1++].val=val;
  30. }
  31. }
  32. sort(a,a+c1);
  33. sort(b,b+c2);
  34. int l1=,l2=;
  35. int id0,id1;
  36. while(l1<c1&&l2<c2)
  37. {
  38. id0=a[l1].id;
  39. id1=b[l2].id;
  40. if(a[l1].val<b[l2].val)
  41. {
  42. cout<<a[l1].id<<' '<<b[l2].id<<' '<<a[l1].val<<endl;
  43. b[l2].val-=a[l1].val;
  44. l1++;
  45. if(l1>=c1)l2++;//如果其中一种颜色没了,那么最后一个连的另外一种颜色的节点就没有节点连了(也就是叶子结点)
  46. }
  47. else
  48. {
  49. cout<<a[l1].id<<' '<<b[l2].id<<' '<<b[l2].val<<endl;
  50. a[l1].val-=b[l2].val;
  51. l2++;
  52. if(l2>=c2)l1++;
  53. }
  54. }
  55. while(l1<c1)//所有剩下的节点和最后一个另外一种颜色连
  56. {
  57. cout<<id1<<' '<<a[l1].id<<' '<<a[l1].val<<endl;
  58. l1++;
  59. }
  60. while(l2<c2)
  61. {
  62. cout<<id0<<' '<<b[l2].id<<' '<<b[l2].val<<endl;
  63. l2++;
  64. }
  65. return ;
  66. }

代码2(写残版):

我居然用了优先队列,患上STL综合症的我脑残了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e5+;
  4. struct node
  5. {
  6. int col;
  7. int val;
  8. int id;
  9. friend bool operator>(node a,node b)
  10. {
  11. return a.val>b.val;
  12. }
  13. }a[N];
  14. int main()
  15. {
  16. int n;
  17. priority_queue<node,vector<node>,greater<node> >q0,q1;
  18. cin>>n;
  19. for(int i=;i<=n;i++)
  20. {
  21. cin>>a[i].col>>a[i].val;
  22. a[i].id=i;
  23. if(a[i].col)q1.push(a[i]);
  24. else q0.push(a[i]);
  25. }
  26. int id0,id1;
  27. while(q0.size()&&q1.size())
  28. {
  29. node temp0=q0.top();
  30. node temp1=q1.top();
  31. id0=temp0.id;
  32. id1=temp1.id;
  33. if(temp0.val<temp1.val)
  34. {
  35. q0.pop();
  36. q1.pop();
  37. cout<<temp0.id<<' '<<temp1.id<<' '<<temp0.val<<endl;
  38. temp1.val-=temp0.val;
  39. if(q0.size())q1.push(temp1);
  40. }
  41. else
  42. {
  43. q0.pop();
  44. q1.pop();
  45. cout<<temp0.id<<' '<<temp1.id<<' '<<temp1.val<<endl;
  46. temp0.val-=temp1.val;
  47. if(q1.size())q0.push(temp0);
  48. }
  49. }
  50. while(q0.size())
  51. {
  52. node temp=q0.top();
  53. q0.pop();
  54. cout<<temp.id<<' '<<id1<<' '<<temp.val<<endl;
  55. }
  56. while(q1.size())
  57. {
  58. node temp=q1.top();
  59. q1.pop();
  60. cout<<temp.id<<' '<<id0<<' '<<temp.val<<endl;
  61. }
  62. return ;
  63. }

Codeforces 260D - Black and White Tree的更多相关文章

  1. codeforces 741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(启发式合并)

    codeforces 741D Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths 题意 给出一棵树,每条边上有一个字符,字符集大小只 ...

  2. codeforces 812E Sagheer and Apple Tree(思维、nim博弈)

    codeforces 812E Sagheer and Apple Tree 题意 一棵带点权有根树,保证所有叶子节点到根的距离同奇偶. 每次可以选择一个点,把它的点权删除x,它的某个儿子的点权增加x ...

  3. codeforces 220 C. Game on Tree

    题目链接 codeforces 220 C. Game on Tree 题解 对于 1节点一定要选的 发现对于每个节点,被覆盖切选中其节点的概率为祖先个数分之一,也就是深度分之一 代码 #includ ...

  4. AtCoder 2376 Black and White Tree

    D - Black and White Tree Time limit : 2sec / Memory limit : 256MB Score : 900 points Problem Stateme ...

  5. HDU 5905 Black White Tree(树型DP)

    题目链接  Black White Tree 树型DP,设$f[i][j]$为以$i$为根的子树中大小为$j$的连通块中可以包含的最小黑点数目. $g[i][j]$为以$i$为根的子树中大小为$j$的 ...

  6. 2017国家集训队作业[agc014d]Black and White Tree

    2017国家集训队作业[agc014d]Black and White Tree 题意: ​ 有一颗n个点的树,刚开始每个点都没有颜色.Alice和Bob会轮流对这棵树的一个点涂色,Alice涂白,B ...

  7. Codeforces E. Alyona and a tree(二分树上差分)

    题目描述: Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  8. 【27.91%】【codeforces 734E】Anton and Tree

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. Codeforces 379 F. New Year Tree

    \(>Codeforces \space 379 F. New Year Tree<\) 题目大意 : 有一棵有 \(4\) 个节点个树,有连边 \((1,2) (1,3) (1,4)\) ...

随机推荐

  1. Linux系统——Keepalived高可用集群

    #### keepalived服务的三个重要功能1. 管理LVS负载均衡软件Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动,停止功能,这使得 ...

  2. 3:4 OGNL 表达式二

    总结: 一:ActionContext的结构: 1:set标签创建的对象也是作为非值栈对象. 2:(非值栈的存储都是以键值对的方式存的.) [问非值栈的 User对象] [用例] 关于request: ...

  3. ng-深度学习-课程笔记-0: 概述

    课程概述 这是一个专项课程(Specialization),包含5个独立的课程,学习这门课程后做了相关的笔记记录. (1) 神经网络和深度学习 (2)  改善深层神经网络:超参数调试,正则化,优化 ( ...

  4. Linux服务器---apache支持cgi

    Apache支持cgi  1.打开Apache配置文件httpd.conf,搜索“cgi”,找到下面的一段,去掉“addhandler”前面的“#“,这样就开启了Apache的cgi功能 [root@ ...

  5. PHP empty、isset、isnull的区别

    PHP empty.isset.isnull的区别 empty 如果 变量 是非空或非零的值,则 empty() 返回 FALSE.换句话说,”".0.”0″.NULL.FALSE.arra ...

  6. Java微服务框架一览

    引言:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架. 微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大.更复杂的应用程序,而这 ...

  7. 深入理解kafka

    摘自: <kafka权威指南> 集群间成员关系 Kafka 使用Zoo keeper 来维护集群成员的信息.每个broker 都有一个唯一标识符,这个标识符可以在配置文件里指定,也可以自动 ...

  8. Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing 'value'

    Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing ' ...

  9. AJAX 与 Python 后台通信

    Ajax 简介 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术. Ajax = 异步 ...

  10. 20145105 《Java程序设计》第8周学习总结

    20145105 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 通用API 一.日志 (一)日志API简介 java.util.logging:提供日志功能相关类与接口 ...