[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 ...
随机推荐
- Beta冲刺第四天
一.昨天的困难 没有困难. 二.今天进度 1.林洋洋:修复协作详情,日程详情日程类型显示纠正 2.黄腾达:修复管理者查看协作成员可以移除自己的问题,加入登录.注册表单按回车键就可直接完成操作的功能 3 ...
- 20162318 实验二《Java面向对象程序设计》实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623班 姓名:张泰毓 指导老师:娄老师.王老师 实验日期:2017年4月14日 实验密级:非密级 实验器材:带Lin ...
- python day1 基本语法作业
一.过7 start =1 while start<=10: if start !=7: print(start) start +=1 二.100以内的和 sum = 0 start = 1 w ...
- SELinux与进程管理
- UVA 10622 Perfect P-th Powers
https://vjudge.net/problem/UVA-10622 将n分解质因数,指数的gcd就是答案 如果n是负数,将答案除2至奇数 原理:(a*b)^p=a^p*b^p #include& ...
- SENet
 \(\bf F_{tr}\) 为标准卷积操作 \(\bf F_{sq}\) 为 Global Average Pooling \(\bf F_{ex}\) 为两层全连接网络(可以看做两个1×1卷积 ...
- 前端面试题之css
1.请列出几个具有继承特性的css属性 font-family font-size color line-height text-align text-indent 2.阐述display: ...
- datetimepicker.js 使用笔记
1.官网地址 官网传送门 2.属性及使用示例 2.1调用 html: <input type="text" readonly class="date" ...
- EasyUI 主布局整合。
博文学习地址:http://www.cnblogs.com/xishuai/p/3620327.html html: <%@ Page Language="C#" AutoE ...
- 基于RNN的音频降噪算法 (附完整C代码)
前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可 ...