BZOJ 2809 [Apio2012]dispatching 可并堆

题意:链接方法:可并堆解析:水题,但注意过程爆int.方法就是找到树的根节点,之后扫,将每个子树什么的看做一个堆,然后之间合并,如果堆中的sum和超过了m,,则去掉最大的,继续添加,这个显然啊。然后每次处理完一个点,用堆中解更新答案。比前两道水代码:using namespace std;typedef long long ll;int n,m,all_root,cnt;ll ans;int head[N],h[N],fa[N],ch[N][2],root[N];ll sum[N],val[N],lead[N],size[N];struct node{ int from,to,next;}edge[N];int find(int x){return fa[x]==x?fa[x]:fa[x]=find(fa[x]);}void pushup(int x){sum[x]=sum[ch[x][0]]+sum[ch[x][1]]+val[x];size[x]=size[ch[x][0]]+size[ch[x][1]]+1;}void init(){ memset(head,-1,sizeof(head)),cnt=1; for(int i=1;i<=n;i++)fa[i]=i;}void edgeadd(int from,int to){ edge[cnt].to=to,edge[cnt].next=head[from],head[from]=cnt++;}int merge(int x,int y){}void dfs(int x){}int main(){}

才能做到人在旅途,感悟人生,享受人生。

BZOJ 2809 [Apio2012]dispatching 可并堆

相关文章:

你感兴趣的文章:

标签云: