来自FallDream的博客,未经允许,请勿转载,谢谢。


给定一张图,求每个点到第n个点必须经过的点的编号之和。n<=50000

一道支配树裸题

然后统计答案的时候可以正着推,ans[i]=ans[idom[i]]+i

#include<iostream>
#include<cstdio>
#include<cstring>
#define MN 50000
#define ll long long
using namespace std;
inline int read()
{
int x = , f = ; char ch = getchar();
while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
}
ll val[MN+];
int n,m,cnt,tot=,mark[MN+],dn,head[MN+],Fa[MN+],fa[MN+],top[MN+],back[MN+],Best[MN+],dfn[MN+],id[MN+],s[MN+],d[MN+];
struct edge{int to,next;}e[MN*];
inline void ins(int*H,int f,int t){e[++cnt]=(edge){t,H[f]};H[f]=cnt;} void Pre(int x)
{
id[dfn[x]=++dn]=x;
for(int i=head[x];i;i=e[i].next)
if(!dfn[e[i].to]) Fa[e[i].to]=x,Pre(e[i].to);
}
inline bool P(int x,int y){return dfn[x]>dfn[y];}
inline int Up(int x)
{
if(fa[x]==x) return x;
int y=Up(fa[x]);
if(P(s[Best[x]],s[Best[fa[x]]])) Best[x]=Best[fa[x]];
return fa[x]=y;
} inline void Tarjan()
{
for(int i=dn;i>;--i)
{
int u=id[i];
for(int j=back[u];j;j=e[j].next)
if(dfn[e[j].to])
Up(e[j].to),P(s[u],s[Best[e[j].to]])?s[u]=s[Best[e[j].to]]:;
ins(top,s[u],u);fa[u]=Fa[u];u=Fa[u];
for(int j=top[u];j;j=e[j].next)
{
Up(e[j].to);
if(s[Best[e[j].to]]==s[u]) d[e[j].to]=u;
else d[e[j].to]=Best[e[j].to];
}
}
for(int i=;i<=dn;++i) if(d[id[i]]!=s[id[i]]) d[id[i]]=d[d[id[i]]];
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
cnt=dn=;++tot;
memset(head,,sizeof(int)*(n+));
memset(back,,sizeof(int)*(n+));
memset(top,,sizeof(int)*(n+));
memset(val,,sizeof(ll)*(n+));
memset(dfn,,sizeof(int)*(n+));
memset(d,,sizeof(int)*(n+));
for(int i=;i<=m;++i)
{
int u=read(),v=read();
ins(head,u,v);
ins(back,v,u);
}
for(int i=;i<=n;++i) Best[i]=s[i]=fa[i]=i;
Pre(n);Tarjan();
for(int i=;i<=dn;++i) val[id[i]]=val[d[id[i]]]+id[i];
for(int i=;i<=n;++i) printf("%I64d%c",dfn[i]?val[i]:,i==n?'\n':' ');
}
return ;
}

[hdu4694]Important Sisters的更多相关文章

  1. HDOJ Important Sisters

    Important Sisters Time Limit: 7000/7000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  2. 【23.91%】【hdu 4694】Important Sisters("支NMLGB配树"后记)(支配树代码详解)

    Time Limit: 7000/7000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission( ...

  3. [HDU]4694 Important Sisters(支配树)

    支配树模板 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...

  4. HDU.4694.Important Sisters(支配树)

    HDU \(Description\) 给定一张简单有向图,起点为\(n\).对每个点求其支配点的编号和. \(n\leq 50000\). \(Solution\) 支配树. 还是有点小懵逼. 不管 ...

  5. hdu 4694 Important Sisters【支配树】

    求出支配树输出到father的和即可 支配树见:https://blog.csdn.net/a710128/article/details/49913553 #include<iostream& ...

  6. Dominator Tree & Lengauer-Tarjan Algorithm

    问题描述 给出一张有向图,可能存在环,对于所有的i,求出从1号点到i点的所有路径上的必经点集合. 什么是支配树 两个简单的小性质—— 1.如果i是j的必经点,而j又是k的必经点,则i也是k的必经点. ...

  7. CSS中"!important"的使用

    本篇文章使用最新的IE10以及firefox与chrome测试(截止2013年5月27日22:23:22) CSS的原理: 我们知道,CSS写在不同的地方有不同的优先级, .css文件中的定义 < ...

  8. jquery修改带!important的css样式

    由于需求的需要,今天在用jquery修改一个弹出框的样式的时候,由于有一个按钮有padding-left:12px;导致内间距空出来的这一块颜色用普通的方式无法改变. 普通的jquery修改css的方 ...

  9. jquery修改css样式,样式带!important

    由于需求的需要,今天在用jquery修改一个弹出框的样式的时候,由于有一个按钮有padding-left:12px;导致内间距空出来的这一块颜色用普通的方式无法改变. 普通的jquery修改css的方 ...

随机推荐

  1. android 自定义ScrollView实现背景图片伸缩(阻尼效果)

    android 自定义ScrollView实现强调内容背景图片伸缩(仿多米,qq空间背景的刷新) 看到一篇文章,自己更改了一下bug: 原文地址:http://www.aiuxian.com/arti ...

  2. [Android FrameWork 6.0源码学习] View的重绘ViewRootImpl的setView方法

    博客首页:http://www.cnblogs.com/kezhuang/p/ 本篇文章来分析一下WindowManager的后续工作,也就是ViewRootImpl的setView函数的工作 /i* ...

  3. mui对话框事件

    mui.confirm('生成成功,是否跳转到订单页面?','',['跳转','取消'],function(e){ if(e.index==0){ //点击跳转 }else if(e.index==1 ...

  4. 更优雅的方式: JavaScript 中顺序执行异步函数

    火于异步 1995年,当时最流行的浏览器--网景中开始运行 JavaScript (最初称为 LiveScript). 1996年,微软发布了 JScript 兼容 JavaScript.随着网景.微 ...

  5. JAVA_SE基础——16.方法

    接触过C语言的同学,这小章节很容易接受.Java中的方法是类似与C语言中的函数  功能和调用方法都类似  只不过叫法不一样  因为java是面向对象  c是面向过程    仅仅是叫法不同.. . 看到 ...

  6. PHP trait

    ps:由于PHP是单继承的,无法继承多个类所以可以用triat(关键字,特性)来命名达到子类继承多个父类的效果:暂且理解为类吧.class = trait <?php trait A { pub ...

  7. jquery-模仿qq提示消息

    ( function() { var ua = navigator.userAgent.toLowerCase(); var is = (ua.match(/\b(chrome|opera|safar ...

  8. 排序技巧——双关键字排序(快速排序,sort)

    一个萌新的成长之路 Background 在做题过程中,我们常会遇到对双关键字排序的情况,如:当分数相等时,序号小的在前. 这时我们可以通过定义cmp函数作为sort的参数进行排序. Solution ...

  9. Python scrapy框架

    Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...

  10. 俄罗斯方块(2D、3D)

    声明:这篇文章主要是参考几个别人的博文及源代码学习.参考文章: 1)http://blog.csdn.net/qian_f/article/details/19758671 2)http://yaca ...