来自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. 【iOS】OC-AFNetworking 2.0 跟踪文件上传进度

    我是较新的 AFNetworking 2.0.使用下面的代码片段,我已经能够成功地将一张照片上传到我的 url.我想要跟踪的增量上载进度,但我找不到这样做 2.0 版的示例.我的应用程序是 iOS 7 ...

  2. JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别

    黑马程序员入学blog ... 如果这章节很难懂的话应该返回去先看  JAVA_SE基础--10.变量的作用域 定义的位置上区别: 1. 成员变量是定义在方法之外,类之内的. 2. 局部变量是定义在方 ...

  3. Python内置函数(35)——next

    英文文档: next(iterator[, default]) Retrieve the next item from the iterator by calling its __next__() m ...

  4. 原生JavaScript实现页面回到顶部的功能

    /*如果想实现点击一个按钮让滚动条回到最顶部的功能,首先可能就会想到它是从底部位置移动到顶部的位置 它是一个运动的过程,只要知道当前位置(current Position)和想要到达的位置(targe ...

  5. loadrunner录制时web时,安全证书问题

    测试环境:win7+LoadRunner11+ie9 遇到的问题:用LoadRunner录制时,打开百度,总是报安全证书问题,如图所示 解决方法:Tools——Recording Options——p ...

  6. python flask框架 tempates 模版的使用

    在py文件同级下 建立templates文件夹,再文件夹中编写html文件 1 向模版中传递参数: ''' 1 向模板传送 参数 ''' @app.route('/') def index(): na ...

  7. WPF项目学习.四

    信息收录项目 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案.  需求文案.设计思路.简要数据库结构.简要流程图和明细代码,动图细化每步操作 ...

  8. Python/MySQL(三、pymysql使用)

    Python/MySQL(三.pymysql使用) 所谓pymysql就是通过pycharm导入pymysql模块进行远程连接mysql服务端进行数据管理操作. 一.在pycharm中导入pymysq ...

  9. Spting +Spring MVC+spring date jsp +hibernate+jq

    controller 控制页面跳转 处理前台后台数据交互 访问servicedao层:@Repository 数据库访问层 增删改查 jpa规范了hibernate jap仓库 jpa自动解析 方法名 ...

  10. 【省带宽、压成本专题】从产品架构来看,PCDN如何节流50%

    过去几年,我们一直在视频省流量方面潜心钻研,取得不俗的成果.本次"省带宽.压成本"系列一共会推出六篇文章,从技术迭代.硬件更新等角度出发,向大家介绍节省CDN流量,降低视频播放成本 ...