Codeforces 260D - Black and White Tree
思路:把两种颜色先按值sort一下,最小值肯定是叶子,然后把这个叶子和另外一中颜色的一个最小值的节点连接起来,再把这个节点变成叶子,把值减掉就可以了。
如下图:
代码1:
- #include<bits/stdc++.h>
- using namespace std;
- const int N=1e5+;
- struct node
- {
- int val,id;
- bool operator <(node &a)
- {
- return val<a.val;
- }
- }a[N],b[N];
- int main()
- {
- int n;
- int c1=,c2=;
- int col,val;
- cin>>n;
- for(int i=;i<=n;i++)
- {
- cin>>col>>val;
- if(col)
- {
- b[c2].id=i;
- b[c2++].val=val;
- }
- else
- {
- a[c1].id=i;
- a[c1++].val=val;
- }
- }
- sort(a,a+c1);
- sort(b,b+c2);
- int l1=,l2=;
- int id0,id1;
- while(l1<c1&&l2<c2)
- {
- id0=a[l1].id;
- id1=b[l2].id;
- if(a[l1].val<b[l2].val)
- {
- cout<<a[l1].id<<' '<<b[l2].id<<' '<<a[l1].val<<endl;
- b[l2].val-=a[l1].val;
- l1++;
- if(l1>=c1)l2++;//如果其中一种颜色没了,那么最后一个连的另外一种颜色的节点就没有节点连了(也就是叶子结点)
- }
- else
- {
- cout<<a[l1].id<<' '<<b[l2].id<<' '<<b[l2].val<<endl;
- a[l1].val-=b[l2].val;
- l2++;
- if(l2>=c2)l1++;
- }
- }
- while(l1<c1)//所有剩下的节点和最后一个另外一种颜色连
- {
- cout<<id1<<' '<<a[l1].id<<' '<<a[l1].val<<endl;
- l1++;
- }
- while(l2<c2)
- {
- cout<<id0<<' '<<b[l2].id<<' '<<b[l2].val<<endl;
- l2++;
- }
- return ;
- }
代码2(写残版):
我居然用了优先队列,患上STL综合症的我脑残了。
- #include<bits/stdc++.h>
- using namespace std;
- const int N=1e5+;
- struct node
- {
- int col;
- int val;
- int id;
- friend bool operator>(node a,node b)
- {
- return a.val>b.val;
- }
- }a[N];
- int main()
- {
- int n;
- priority_queue<node,vector<node>,greater<node> >q0,q1;
- cin>>n;
- for(int i=;i<=n;i++)
- {
- cin>>a[i].col>>a[i].val;
- a[i].id=i;
- if(a[i].col)q1.push(a[i]);
- else q0.push(a[i]);
- }
- int id0,id1;
- while(q0.size()&&q1.size())
- {
- node temp0=q0.top();
- node temp1=q1.top();
- id0=temp0.id;
- id1=temp1.id;
- if(temp0.val<temp1.val)
- {
- q0.pop();
- q1.pop();
- cout<<temp0.id<<' '<<temp1.id<<' '<<temp0.val<<endl;
- temp1.val-=temp0.val;
- if(q0.size())q1.push(temp1);
- }
- else
- {
- q0.pop();
- q1.pop();
- cout<<temp0.id<<' '<<temp1.id<<' '<<temp1.val<<endl;
- temp0.val-=temp1.val;
- if(q1.size())q0.push(temp0);
- }
- }
- while(q0.size())
- {
- node temp=q0.top();
- q0.pop();
- cout<<temp.id<<' '<<id1<<' '<<temp.val<<endl;
- }
- while(q1.size())
- {
- node temp=q1.top();
- q1.pop();
- cout<<temp.id<<' '<<id0<<' '<<temp.val<<endl;
- }
- return ;
- }
Codeforces 260D - Black and White Tree的更多相关文章
- 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 题意 给出一棵树,每条边上有一个字符,字符集大小只 ...
- codeforces 812E Sagheer and Apple Tree(思维、nim博弈)
codeforces 812E Sagheer and Apple Tree 题意 一棵带点权有根树,保证所有叶子节点到根的距离同奇偶. 每次可以选择一个点,把它的点权删除x,它的某个儿子的点权增加x ...
- codeforces 220 C. Game on Tree
题目链接 codeforces 220 C. Game on Tree 题解 对于 1节点一定要选的 发现对于每个节点,被覆盖切选中其节点的概率为祖先个数分之一,也就是深度分之一 代码 #includ ...
- AtCoder 2376 Black and White Tree
D - Black and White Tree Time limit : 2sec / Memory limit : 256MB Score : 900 points Problem Stateme ...
- HDU 5905 Black White Tree(树型DP)
题目链接 Black White Tree 树型DP,设$f[i][j]$为以$i$为根的子树中大小为$j$的连通块中可以包含的最小黑点数目. $g[i][j]$为以$i$为根的子树中大小为$j$的 ...
- 2017国家集训队作业[agc014d]Black and White Tree
2017国家集训队作业[agc014d]Black and White Tree 题意: 有一颗n个点的树,刚开始每个点都没有颜色.Alice和Bob会轮流对这棵树的一个点涂色,Alice涂白,B ...
- Codeforces E. Alyona and a tree(二分树上差分)
题目描述: Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 【27.91%】【codeforces 734E】Anton and Tree
time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Codeforces 379 F. New Year Tree
\(>Codeforces \space 379 F. New Year Tree<\) 题目大意 : 有一棵有 \(4\) 个节点个树,有连边 \((1,2) (1,3) (1,4)\) ...
随机推荐
- Linux系统——Keepalived高可用集群
#### keepalived服务的三个重要功能1. 管理LVS负载均衡软件Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动,停止功能,这使得 ...
- 3:4 OGNL 表达式二
总结: 一:ActionContext的结构: 1:set标签创建的对象也是作为非值栈对象. 2:(非值栈的存储都是以键值对的方式存的.) [问非值栈的 User对象] [用例] 关于request: ...
- ng-深度学习-课程笔记-0: 概述
课程概述 这是一个专项课程(Specialization),包含5个独立的课程,学习这门课程后做了相关的笔记记录. (1) 神经网络和深度学习 (2) 改善深层神经网络:超参数调试,正则化,优化 ( ...
- Linux服务器---apache支持cgi
Apache支持cgi 1.打开Apache配置文件httpd.conf,搜索“cgi”,找到下面的一段,去掉“addhandler”前面的“#“,这样就开启了Apache的cgi功能 [root@ ...
- PHP empty、isset、isnull的区别
PHP empty.isset.isnull的区别 empty 如果 变量 是非空或非零的值,则 empty() 返回 FALSE.换句话说,”".0.”0″.NULL.FALSE.arra ...
- Java微服务框架一览
引言:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架. 微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大.更复杂的应用程序,而这 ...
- 深入理解kafka
摘自: <kafka权威指南> 集群间成员关系 Kafka 使用Zoo keeper 来维护集群成员的信息.每个broker 都有一个唯一标识符,这个标识符可以在配置文件里指定,也可以自动 ...
- Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing 'value'
Python3 Selenium自动化测试赋值出现:WebDriverException: Message: unknown error: call function result missing ' ...
- AJAX 与 Python 后台通信
Ajax 简介 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术. Ajax = 异步 ...
- 20145105 《Java程序设计》第8周学习总结
20145105 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 通用API 一.日志 (一)日志API简介 java.util.logging:提供日志功能相关类与接口 ...