Problem Description
给定一个有向图,每个点ii有点权a_ia​i​​,请对于每个点ii,找到ii能到达的点中点权的最大值(包括ii点)。

Input
第一行包含一个正整数T(1\leq T\leq 10)T(1≤T≤10),表示测试数据的组数。

每组数据第一行包含两个正整数n,m(1\leq n\leq 100000,1\leq m\leq 200000)n,m(1≤n≤100000,1≤m≤200000),表示点数和边数。

第二行包含nn个正整,依次表示每个点的点权。

接下来m行,每行包含两个正整数u_i,v_i(1\leq u_i,v_i\leq n,u_i\neq v_i),表示一条u_i\rightarrow v_i的单向边。

Output
对于每组数据输出n行,每行一个整数,第$i$行的数表示$i$点能到达的点中点权的最大值。

输入样例

1
6 6
3 7 5 3 8 5
1 2
2 3
3 1
4 5
5 6
2 6

输出样例

7
7
7
8
8
5


kosaraju算法的应用,在最外面的循环统计强连通分量的个数,在内层dfs统计点的个数
edge不用清空,head需要清空,f需要清空
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=2e5+10;
int head[M],chead[M];
int vis[N],f[N],q[N];
typedef long long ll;
struct _edge
{
int to,next;
}edge[M];
_edge cedge[M];
int cnt=0,ccnt=0,t=0,sum=0;
void add_edge(int from,int to)
{
edge[++cnt].to=to;
edge[cnt].next=head[from];
head[from]=cnt;
}
void cadd_edge(int from,int to)
{
cedge[++ccnt].to=to;
cedge[ccnt].next=chead[from];
chead[from]=ccnt;
}
void dfs(int x)
{
vis[x]=1;
for(int i=head[x];~i;i=edge[i].next)
{
int j=edge[i].to;
if(!vis[j])
dfs(j);
}
q[++t]=x;
}
void dfs2(int x,int y)
{
vis[x]=0;
f[sum]++;
for(int i=chead[x];~i;i=cedge[i].next)
{
int j=cedge[i].to;
if(vis[j]) dfs2(j,y);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int T;cin>>T;
while(T--)
{
int n,m,x,y;
cin>>n>>m;
cnt=0,ccnt=0,t=0;
memset(f,0,sizeof(f));
memset(vis,0,sizeof(vis));
memset(head,-1,sizeof(head));
memset(chead,-1,sizeof(chead));
for(int i=0;i<m;++i)
{
cin>>x>>y;
add_edge(x,y);
cadd_edge(y,x);
}
for(int i=1;i<=n;++i)
{
if(!vis[i])
dfs(i);
}
sum=0;
for(int i=n;i>=1;--i)
{
//cout<<q[i]<<'\n';
if(vis[q[i]])
{sum++;dfs2(q[i],q[i]);
}
}
ll ans=0;
for(int i=1;i<=sum;++i)
{
ans+=(f[i]*(ll)(f[i]-1)/2);//除以2不能放在(f[i]-1)前面会向下取整
//cout<<f[i]<<'\n';
}
cout<<ans<<'\n';
}
return 0;
}
 

hdu:最大点权(强连通分量kosaraju)的更多相关文章

  1. HDU 3639 Hawk-and-Chicken(强连通分量+缩点)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013480600/article/details/32140501 HDU 3639 Hawk-a ...

  2. 强连通分量-----Kosaraju

    芝士: 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connect ...

  3. hdu 4685(匹配+强连通分量)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685 思路:想了好久,终于想明白了,懒得写了,直接copy大牛的思路了,写的非常好! 做法是先求一次最 ...

  4. POJ 2186 Popular Cows(强连通分量Kosaraju)

    http://poj.org/problem?id=2186 题意: 一个有向图,求出点的个数(任意点可达). 思路: Kosaraju算法的第一次dfs是后序遍历,而第二次遍历时遍历它的反向图,从标 ...

  5. 有向图的强连通分量——kosaraju算法

    一.前人种树 博客:Kosaraju算法解析: 求解图的强连通分量

  6. 模板 - 图论 - 强连通分量 - Kosaraju算法

    这个算法是自己实现的Kosaraju算法,附带一个缩点,其实缩点这个跟Kosaraju算法没有什么关系,应该其他的强连通分量算法计算出每个点所属的强连通分量之后也可以这样缩点. 算法复杂度: Kosa ...

  7. 模板 - 强连通分量 - Kosaraju

    Kosaraju算法 O(n+m) vector<int> s; void dfs1(int u) { vis[u] = true; for (int v : g[u]) if (!vis ...

  8. 图的强连通分量-Kosaraju算法

    输入一个有向图,计算每个节点所在强连通分量的编号,输出强连通分量的个数 #include<iostream> #include<cstring> #include<vec ...

  9. 强连通分量Kosaraju

    #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #i ...

  10. 有向图强连通分量的Tarjan算法和Kosaraju算法

    [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...

随机推荐

  1. 使用CSS 绘制各种形状

      如何使用CSS 绘制各种形状? 很多小伙伴在做开发的时候,遇到一些要画很多形状的时候,就很纠结了,知道怎么用CSS去布局,就是不知道怎么画图案. 其实使用CSS可以绘制出很形状的,比如三角形,梯形 ...

  2. RecyclerView setHasFixedSize(true)

    RecyclerView setHasFixedSize(true)当recycleview大小高宽不变的时候使用这个,可以提升效率

  3. .netcore webapi的返回值和过滤器

    1.返回值. 1.1直接返回数据 1.2 数据+状态码 返回这种类型IActionResult 可以使用return OK(T).return NotFound(T) 1.3前两种的混合使用Actio ...

  4. WPF窗体图标设置

    WPF程序在编写结束后,界面没有图标,影响美观性.今天在添加图标的时候,一直报错,然后通过查找资料,将这个问题解决,现在将主要步骤记录如下; 准备好图标文件,注意文件格式应该为ico格式文件.有一个在 ...

  5. iptables(一)基础概念、filter表常用语法规则

    iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...

  6. 解决Maven下载依赖慢的问题

    参考:https://blog.csdn.net/web15085599741/article/details/126459039 <repositories> <repositor ...

  7. 大规模并行处理器编程实战_原书第2版_pdf

    链接:https://pan.baidu.com/s/1c8ez8dCTz5bUQchwhXAF7w 提取码:tc1f

  8. ComPiler200003:Story-Oriented Programming

    Story-Oriented Programming MAY 25TH, 2018 http://www.brandonkeown.com/2018/05/story-oriented-program ...

  9. php7安装mogodb

    本文教程只在 PHP7 安装使用!!! PHP7 Mongdb 扩展安装 我们使用 pecl 命令来安装: $ /usr/local/php7/bin/pecl install mongodb 执行成 ...

  10. abc289g题解

    考虑枚举卖出的物品个数\(i\),把\(b_i\)从大到小排序. 题目的某人会买物品的条件转化为\(b_i\geq p_j-c_j\),这说明卖出的物品的集合是排序后\(b\)的一段前缀,且卖出\(i ...