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 ...
随机推荐
- LeetCode(16)题解--3Sum Closest
https://leetcode.com/problems/3sum-closest/ 题目: Given an array S of n integers, find three integers ...
- ZooKeeper学习笔记(一)
引导 刚开始学习ZooKeepter,看的书是[O'Reilly Media] ZooKeeper.下面的内容基本上是该书的翻译,很多语句也存在问题,大致读还是没问题的,自己在学习中记录. 第一章 Z ...
- ios上视频与音乐合成后出现播放兼容问题的解决方法
近期EasyDarwin开源流媒体团队EasyVideoRecorder小组同学Carl在支持一款短视频应用上线时,遇到一个问题:我们在IOS上合成"图片+音乐"成为视频之后,在P ...
- poi 处理excel 小数问题 整数不保留小数位 整数多.0
读取的单元格为 hssfCell ,传入下面我提供的方法处理默认poi返回的为DOUBLE,所有先转为Long判断下,再进行返回: private String getValue(Cell hssfC ...
- 基于XML配置的Sping AOP详解
一.编写基本处理方法 package com.kang.sping.xml.aop; public class Math{ //加 public int add(int n1,int n2){ int ...
- 判断一个IP地址是否是本局域网内地址
// /// <summary> /// 判断一个IP地址是否是本局域网内地址,是返回true 否则返回false, /// </summa ...
- 九度OJ 1123:采药 (01背包、DP、DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2705 解决:1311 题目描述: 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师. 为此,他想拜附近最有威望的医师为师 ...
- it starts (“forks”) a new process for each connection.
PostgreSQL: Documentation: 10: 1.2. Architectural Fundamentals https://www.postgresql.org/docs/10/st ...
- Hadoop集群搭建-Hadoop2.8.0安装(三)
一.准备安装介质 a).hadoop-2.8.0.tar b).jdk-7u71-linux-x64.tar 二.节点部署图 三.安装步骤 环境介绍: 主服务器ip:192.168.80.128(ma ...
- linux 脚本统计代码行数
由于实际需求,需要统计开源产品的代码行数,so,以下命令统计*.c的行数. .h,.java .同理 find . -name *.c|xargs wc -l