来自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. edittext实现自动查询,刷新listview

    mEdittextqueryvalue.addTextChangedListener(new TextWatcher() {             @Override             pub ...

  2. Swift 2.2 的新特性

    导读:本文来自SwiftGG翻译组,作者@walkingway基于苹果Swift官方博客中Ted Kremenek所撰写的"Swift 2.2 Released!"文章进行了关于S ...

  3. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

  4. HTTP协议扫盲(六)InputStream的复用

    一.问题提出 在进行网关引擎开发时,获取到一个http请求的inputstream后,可能要多次利用它进行read操作.由于流读过一次就不能再读了,所以需要实现InputStream的复制. 而Inp ...

  5. 浅谈Web网站的架构演变过程

    前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...

  6. python实现 多叉树 寻找最短路径

    完全原创,能力有限,欢迎参考,未经允许,请勿转载 ! 完全原创,能力有限,欢迎参考,未经允许,请勿转载 ! 完全原创,能力有限,欢迎参考,未经允许,请勿转载 ! 完全原创,能力有限,欢迎参考,未经允许 ...

  7. Java面试题—初级(3)

    21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...

  8. Spring之事务管理

        事务管理对于企业应用至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.     就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到 ...

  9. Hadoop 3.x 新特性剖析系列1

    1.概述 目前从Hadoop官网的Wiki来看,稳定版本已经发行到Hadoop2.9.0,最新版本为Hadoop3.1.0,查阅JIRA,社区已经着手迭代Hadoop3.2.0.那么,今天笔者就带着大 ...

  10. 一张图片快速明白Python概述