来自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. 关于Java的异常

    异常机制概述 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 异常处理的流程 当程序中抛出 ...

  2. hdu 3642 Get The Treasury

    Get The Treasury http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Othe ...

  3. New UWP Community Toolkit - RangeSelector

    概述 前面 New UWP Community Toolkit 文章中,我们对 V2.2.0 版本的重要更新做了简单回顾,其中简单介绍了 RangeSelector,本篇我们结合代码详细讲解一下 Ra ...

  4. nyoj 矩形个数

    矩形的个数 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3 ...

  5. js常用API方法

    String对象常用的API:API指应用程序编程接口,实际上就是一些提前预设好的方法. charAt() 方法可返回指定位置的字符. stringObject.charAt(index) index ...

  6. api-gateway实践(14)前端签名密钥和后端签名密钥

    1.前端签名密钥 1.1.缓存管理初始:engine初始的时候,从redis拉取全部前端绑定关系到engine缓存.新增/绑定:绑定签名密钥和服务实例,同时缓存该关系到redis,同时缓存到engin ...

  7. SpringBoot应用的启动方式

    一:IDE 运行Application这个类的main方法 二:在SpringBoot的应用的根目录下运行mvn spring-boot:run 三:使用mvn install 生成jar后运行 先到 ...

  8. HTTP协议的消息头:Content-Type和Accept的作用

    一.背景知识 1.概述 Http报头分为通用报头,请求报头,响应报头和实体报头. 请求方的http报头结构:通用报头|请求报头|实体报头 响应方的http报头结构:通用报头|响应报头|实体报头 Acc ...

  9. 新概念英语(1-17)How do you do ?

    Is there a problem wtih the Customers officer? What are Michael Baker and Jeremy Short's jobs? A:Com ...

  10. 03、NetCore2.0下Web应用之搭建最小框架

    03.NetCore2.0下Web应用之搭建最小框架 这里我们不使用VS2017或者CLI命令的方式创建Asp.Net Core 2.0网页应用程序,而是完全手工的一点点搭建一个Web框架,以便更好的 ...