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. flink 版本

    从1.10.0开始,flink版本是一个分界线,所以如果用>1.10版本的特性,一些flink引用可以从1.10官网文档中查 后面版本中没有这些说明了. flink代码文档地址:https:// ...

  2. h5页面回到顶部

    1.锚点 <aname="top"></a> <ahref="#top"></a> 2.回到顶部 documen ...

  3. 防止react-re-render: Why Suspense and how ?

    近期内部项目基础项目依赖升级,之前使用的路由缓存不再适用,需要一个适配方案.而在此过程中react re-render算是困扰了笔者很久.后来通过多方资料查找使用了freeze解决了此问题.本文主要论 ...

  4. Win10应用商店经常遭遇打不开的情况,如错误代码0x80131500

    1.用"win + R"打开运行 2.输入 inetcpl.cpl 打开Internet属性(或从IE浏览器设置打开) 3 点击高级选项 4 找到并勾选 TLS 1.2,取消勾选T ...

  5. Anaconda之conda常用命令介绍

    anaconda用法: 查看已经安装的包: pip list 或者 conda list 安装和更新: pip install requests pip install requests --upgr ...

  6. Python学习笔记组织文件之shutil模块

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  7. 【ZYNQ学习】各个主题的值得看的博客

    在学习ZYNQ时会遇到不少问题,这时我们一方面要在DocNav找Xilinx的官方文档,另一方面要参考别人的一些记录的解决好的办法,我在学习的时候看到了不少大佬的博客,给我带来了很大帮助.在这篇博客, ...

  8. WPFprism框架

    1. Prism 简介Prism 是一个用于构建松耦合.可维护和可测试的 XAML 应用的框架,它支持所有还活着的基于 XAML 的平台,包括 WPF.Xamarin Forms.WinUI 和 ~~ ...

  9. k3s 部署应用

    部署k3s 环境 名称 ip地址 cpu 内存 k3s-master 10.65.91.53 4c 8G k3s-node 10.65.91.52 4c 8G master 与 node 节点 # 改 ...

  10. java中对list集合进行分组

    java中对list集合进行分组 Map<String, List<HealthImport>> excelIdCardNull = importList.stream() . ...