[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 ...
随机推荐
- sql with as 用法-Z
以下内容转自:http:.com/ 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个 ...
- pymysql 多字段插入
d = {'name':'alx','age':18,'pp':11,'cc':12} sql = '''insert into xx(%s) value(%s)''' key_list = [] v ...
- MSSQL 2000 错误823恢复案例
一.故障描述 MSSQL Server 2000 附加数据库错误823,附加数据库失败.数据库没有备份,不能通过备份恢复数据库,急需恢复数据库中的数据. 二.故障分析SQL Server数据库 823 ...
- excel2003和excel2007文件的创建和读取
excel2003和excel2007文件的创建和读取在项目中用的很多,首先我们要了解excel的常用组件和基本操作步骤. 常用组件如下所示: HSSFWorkbook excel的文档对象 HSSF ...
- requestAnimationFrame Web中写动画的另一种选择
HTML5和CSS3盛行的今天 动画变得很简单实现 我们可以用transition . animation + keyframe .也可以用canvas等 我在上一篇 点击回到顶部的文章中发现的这个 ...
- 我的PCB电路设计(一)
我的制板规则 过孔大小:14/24mil-(12/22-28/50) 一般过孔没必要太大.如果电流较大可以适当增大过孔,或者多加几个过孔 线宽大小:小信号线8mil,大电流线不等按1A电流30mil ...
- 数据库 MYSQL操作(一)
数据库 MYSQL操作总结(一) 本文主要介绍一下笔者在使用数据库操作的过程中的一些总结,主要的内容包括一下几个内容: 一.mysql 使用基础(主要包括数据库的安装.基本操作等内容) 二.mysq ...
- WPF 自定义Calendar样式(日历样式,周六周日红色显示)
一.WPF日历控件基本样式 通过Blend获取到Calendar需要设置的三个样式CalendarStyle.CalendarButtonStyle.CalendarDayButtonStyle.Ca ...
- java基础总结(1)安装jdk
卸载java java -version yum remove java yum groupjava java 安装java tar -zxvf jdk-8u60-linu ...
- 框架学习笔记之Hibernate
一.什么是Hibernate Hibernate框架是当今主流的持久层框架之一,该框架是基于JDBC的主流持久化框架,使用它之后能够大大简化程序DAO层的代码量,提高工作效率,因此受广大开发人员的喜爱 ...