[HDU]4694 Important Sisters(支配树)
支配树模板
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
inline int read()
{
int x;char c;
while((c=getchar())<''||c>'');
for(x=c-'';(c=getchar())>=''&&c<='';)x=x*+c-'';
return x;
}
#define MN 50000
#define MM 100000
struct ZPS
{
struct edge{int nx,t;}e[MM*+MN+];
int h[MN+],rh[MN+],v[MN+],en,fa[MN+],d[MN+],p[MN+],cnt;
int id[MN+],sd[MN+],f[MN+],mn[MN+];
inline void ins(int*h,int x,int y){e[++en]=(edge){h[x],y};h[x]=en;}
inline void ins(int x,int y){ins(h,x,y);ins(rh,y,x);}
void dfs(int x)
{
p[d[x]=++cnt]=x;
for(int i=h[x];i;i=e[i].nx)if(!d[e[i].t])fa[e[i].t]=x,dfs(e[i].t);
}
int gf(int x)
{
if(!f[x])return x;
int ff=gf(f[x]);
if(sd[mn[f[x]]]<sd[mn[x]])mn[x]=mn[f[x]];
return f[x]=ff;
}
void build(int s)
{
dfs(s);
for(int i=;i<=cnt;++i)sd[i]=mn[i]=i;
for(int i=cnt;i>;--i)
{
for(int j=rh[p[i]];j;j=e[j].nx)if(d[e[j].t])
gf(d[e[j].t]),sd[i]=min(sd[i],sd[mn[d[e[j].t]]]);
ins(v,sd[i],i);f[i]=d[fa[p[i]]];
for(int&j=v[f[i]];j;j=e[j].nx)
gf(e[j].t),id[e[j].t]=e[j].t==mn[e[j].t]?f[i]:mn[e[j].t];
}
for(int i=;i<=cnt;++i)id[i]=id[i]==sd[i]?id[i]:id[id[i]];
}
}T;
ll ans[MN+];
int main()
{
int n,m,x,y,i;
while(~scanf("%d%d",&n,&m))
{
memset(&T,,sizeof(T));
while(m--)x=read(),y=read(),T.ins(x,y);
T.build(n);
for(i=;i<=T.cnt;++i)ans[i]=ans[T.id[i]]+T.p[i];
for(i=;i<=n;++i)printf("%I64d%c",ans[T.d[i]],i<n?' ':'\n');
}
}
[HDU]4694 Important Sisters(支配树)的更多相关文章
- HDU.4694.Important Sisters(支配树)
HDU \(Description\) 给定一张简单有向图,起点为\(n\).对每个点求其支配点的编号和. \(n\leq 50000\). \(Solution\) 支配树. 还是有点小懵逼. 不管 ...
- hdu 4694 Important Sisters【支配树】
求出支配树输出到father的和即可 支配树见:https://blog.csdn.net/a710128/article/details/49913553 #include<iostream& ...
- 【23.91%】【hdu 4694】Important Sisters("支NMLGB配树"后记)(支配树代码详解)
Time Limit: 7000/7000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission( ...
- HDOJ Important Sisters
Important Sisters Time Limit: 7000/7000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- HDU 5862 Counting Intersections(离散化+树状数组)
HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...
- 康复计划#4 快速构造支配树的Lengauer-Tarjan算法
本篇口胡写给我自己这样的老是证错东西的口胡选手 以及那些想学支配树,又不想啃论文原文的人- 大概会讲的东西是求支配树时需要用到的一些性质,以及构造支配树的算法实现- 最后讲一下把只有路径压缩的并查集卡 ...
- hdu 5517 Triple(二维树状数组)
Triple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- hdu 5700区间交(线段树)
区间交 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- [hdu4694]Important Sisters
来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一张图,求每个点到第n个点必须经过的点的编号之和.n<=50000 一道支配树裸题 然后统计答案的时候可以正着推,ans[i]=an ...
随机推荐
- Bate敏捷冲刺每日报告--day3
1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285) Git链接:https://github.com/WHUSE2017/C-team 2 ...
- 201621123062《java程序设计》第七周作业总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 1.布局管理器的具体使用方法 2.事件处理模型及其代码的编写 3.Swing中的常用组件 4. ...
- eclipse下maven一些配置方法汇总
随着eclipse的不同版本的变更:对maven插件的安装也有着不同的差异:之前也在一些版本的eclipse上安装成功地,但是最近又遇到了一些麻烦,故将这些方法记录下来: 大家都知道的最常用的一种方式 ...
- Apache自带 ab压测工具 Windows配置使用说明 - 随笔记录
我们先来了解一下ab工具的概念,摘自网络: ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如ngin ...
- 偶遇vue-awesome-swiper的坑
最近用vue重构一个移动端的项目,碰到了不少坑,今天拿移动端最著名的轮播插件swiper为例来说,由于这个项目没用UI库,纯手写的样式,沿用老的插件,自然而然的选择了vue-awesome-swipe ...
- Xamarin控件使用之ListView
listview单列多行的显示,以后再加多列多行的实例. [Activity(Label = "GraphicAll", LaunchMode = LaunchMode.Singl ...
- ASP.NET MVC中错误处理方式
/// <summary> /// 标记了HandleError,并指明错误处理页为AboutError.aspx /// </summary> /// <returns ...
- Andrew Ng机器学习第一章——单变量线性回归
监督学习算法工作流程 h代表假设函数,h是一个引导x得到y的函数 如何表示h函数是监督学习的关键问题 线性回归:h函数是一个线性函数 代价函数 在线性回归问题中,常常需要解决最小化问题.代价函数常用平 ...
- mosquitto验证client互相踢
cleint11A订阅topic#################################################### server发送topic消息 ############### ...
- BAT美团滴滴java面试大纲(带答案版)之三:多线程Lock
继续面试大纲系列文章. 这是多线程的第二篇. 多线程就像武学中对的吸星大法,理解透了用好了可以得道成仙,俯瞰芸芸众生:而滥用则会遭其反噬. 在多线程编程中要渡的第二个“劫”,则是Lock.在很多时候, ...