博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 260D - Black and White Tree
阅读量:5923 次
发布时间:2019-06-19

本文共 1500 字,大约阅读时间需要 5 分钟。

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

如下图:

代码1

#include
using namespace std;const int N=1e5+5;struct node{ int val,id; bool operator <(node &a) { return val
>n; for(int i=1;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=0,l2=0; int id0,id1; while(l1
=c1)l2++;//如果其中一种颜色没了,那么最后一个连的另外一种颜色的节点就没有节点连了(也就是叶子结点) } else { cout<
<<' '<
<<' '<
<
=c2)l1++; } } while(l1

代码2(写残版):

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

#include
using namespace std;const int N=1e5+5;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
,greater
>q0,q1; cin>>n; for(int i=1;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

 

转载于:https://www.cnblogs.com/widsom/p/7206977.html

你可能感兴趣的文章
PaaS平台走开放、开源之路
查看>>
搞大流量很难,但搞精准流量很容易
查看>>
EBS维护常识
查看>>
vs 附加到进程
查看>>
《Microsoft SQL Server 2008 Analysis Services Step by Step》学习笔记六:创建高级度量和计算(下)...
查看>>
【原】windows 7 安装 PetShop 4.0 问题小结
查看>>
0 bytes after compression出现的情况
查看>>
60佳精美的绿色风格网页设计欣赏(上篇)
查看>>
如何使用本地账户"完整"安装 SharePoint Server
查看>>
十分钟掌握diff&patch用法(转)
查看>>
怎么在ASP.NET WebForm中使用Razor视图引擎(转载)
查看>>
图片自动随div大小改变
查看>>
(译)在Objective-c里面使用property教程
查看>>
Android --- 图片的特效处理
查看>>
PL SQL 9 安装 并连接 64位 Oracle 11G
查看>>
ASP.NET FormsAuthentication跨站点登录时绝对地址返回的问题
查看>>
【译】在Asp.Net中操作PDF – iTextSharp -利用块,短语,段落添加文本
查看>>
UVA 620 Cellular Structure
查看>>
opencv识别三角形代码(转)
查看>>
配置监听非默认端口(1521)的em
查看>>