hdu 4694 Important Sisters【支配树】
求出支配树输出到father的和即可
支配树见:https://blog.csdn.net/a710128/article/details/49913553
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int N=300005;
int n,m,h[N],cnt,se[N],id[N],rl[N],fa[N],dfn[N],tot,f[N],v[N];
long long ans[N];
vector<int>p[N],d[N];
struct qwe
{
int ne,to;
}e[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
h[u]=cnt;
}
void dfs(int u)
{
dfn[u]=++tot;
rl[tot]=u;
for(int i=h[u];i;i=e[i].ne)
{
p[e[i].to].push_back(u);
if(!dfn[e[i].to])
{
fa[e[i].to]=u;
dfs(e[i].to);
}
}
}
int zhao(int x)
{
if(f[x]==x)
return x;
int fa=zhao(f[x]);
if(dfn[se[v[f[x]]]]<dfn[se[v[x]]])
v[x]=v[f[x]];
return f[x]=fa;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(h,0,sizeof(h));
memset(id,0,sizeof(id));
memset(dfn,0,sizeof(dfn));
memset(ans,0,sizeof(ans));
cnt=0;tot=0;
for(int i=1;i<=n;i++)
p[i].clear(),d[i].clear(),f[i]=v[i]=se[i]=i;
for(int i=1;i<=m;i++)
{
int x=read(),y=read();
add(x,y);
}
dfs(n);
for(int i=tot;i>=2;i--)
{
for(int j=0;j<p[rl[i]].size();j++)
{
if(dfn[p[rl[i]][j]]<dfn[rl[i]])
se[rl[i]]=(dfn[se[rl[i]]]<dfn[p[rl[i]][j]])?se[rl[i]]:p[rl[i]][j];
else
{
zhao(p[rl[i]][j]);
se[rl[i]]=(dfn[se[rl[i]]]<dfn[se[v[p[rl[i]][j]]]])?se[rl[i]]:se[v[p[rl[i]][j]]];
}
}
f[rl[i]]=fa[rl[i]];
d[se[rl[i]]].push_back(rl[i]);
for(int j=0;j<d[fa[rl[i]]].size();j++)
{
zhao(d[fa[rl[i]]][j]);
id[d[fa[rl[i]]][j]]=(dfn[se[v[d[fa[rl[i]]][j]]]]<dfn[se[d[fa[rl[i]]][j]]])?v[d[fa[rl[i]]][j]]:fa[rl[i]];
}
}
for(int i=2;i<=tot;i++)
if(id[rl[i]]!=se[rl[i]])
id[rl[i]]=id[id[rl[i]]];
for(int i=1;i<=n;i++)
ans[i]=0;
for(int i=1;i<=tot;i++)
{
ans[rl[i]]+=rl[i];
if(id[rl[i]])
ans[rl[i]]+=ans[id[rl[i]]];
}
for(int i=1;i<n;i++)
printf("%lld ",ans[i]);
printf("%lld\n",ans[n]);
}
return 0;
}
hdu 4694 Important Sisters【支配树】的更多相关文章
- HDU.4694.Important Sisters(支配树)
HDU \(Description\) 给定一张简单有向图,起点为\(n\).对每个点求其支配点的编号和. \(n\leq 50000\). \(Solution\) 支配树. 还是有点小懵逼. 不管 ...
- [HDU]4694 Important Sisters(支配树)
支配树模板 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...
- 【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 ...
随机推荐
- java基础知识查漏 四
1.JAVA多线程实现方式 (1)继承Thread类,并重写run()方法 (2)实现Runnable接口,,实现run()方法 (3)使用ExecutorService.Callable.Futur ...
- HDFS HBase Solr Which one?
从访问模式角度决策 HDFS 压缩性能最优.扫描速度最快:不支持随机访问,仅支持昂贵.复杂的文件查询 HBase适合随机访问 Solr 适合检索需求 HBase访问单个记录的时间为毫秒级别,而HDFS ...
- SQL Server 2005中top关键字的用法
1.返回N条记录数 select top n * from <表名> [查询条件] 2.返回总结果集中指定百分比记录数 select top n percent * from <表名 ...
- bzoj4486: [Jsoi2015]串分割
肉丝哥哥钦定好题 话说我的blog现在为什么到处都是肉丝哥哥 先来想一个弱化版,假如能够n整除K怎么做? 把每个数字看成一个字符串,按字典序排名,这个可以后缀数组解决,然后暴力枚举每种情况,O(1)判 ...
- AttributeError: module 'tensorflow' has no attribute 'sub'
官方的例子:运行之后出现以下错误 # 进入一个交互式 TensorFlow 会话. import tensorflow as tf sess = tf.InteractiveSession() x = ...
- <ZZ>Linux rpm 命令参数使用详解[介绍和应用]
http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html RPM是RedHat Package Manager ...
- codeforces B. Coach 解题报告
题目链接:http://codeforces.com/problemset/problem/300/B 题目意思:给出n个students(n%3 = 0),编号依次为1-n,接下来有m行,每行有两个 ...
- Rsync+Sersync同步
Rsync+Sersync同步特点: (1):sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字:(2):rsync在同步的时候,只同步发生变化的这 ...
- [SDOI2012]任务安排
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2726 [算法] 此题与POJ1180非常相似 但是 , 此题中的t值可能为负 , 这 ...
- FFT的常数优化
卡得一手好常数..学习了..(似乎只对FFT有效) JZOJ 4349 #include <bits/stdc++.h> #define LL long long #define DB l ...