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. D_GLIBCXX_USE_CXX11_ABI

    gcc ABI兼容 设置=0,表示使用C++11之前的ABI 反之,使用C++11的ABI

  2. 一例OSS问题排查

    某品牌OSS存储,使用IP+PORT可以正常访问.使用NG代理后,不论是IP还是域名访问都不支持SDK访问,但是使用S3客户端可以正常访问. 通过抓包对比发现,S3客户端如下 SDK访问抓包如下 判断 ...

  3. HDLbits——Lfsr5

    Build this LFSR. The reset should reset the LFSR to 1 module top_module( input clk, input reset, // ...

  4. java中的批量导入,批量更新数据

    批量插入 数据,提高效率 Dao层 int insertBatch(List<HealthImport> list); xml文件 <insert id="insertBa ...

  5. 钉钉-E应用开发初体验(企业内部应用)

    首先要创建应用,如何创建参考 https://open-doc.dingtalk.com/microapp/bgb96b/gt5d6a 下载 钉钉E应用服务端demo   git clone http ...

  6. Docker安装 Redis Stack(开发适配-提供 Redis Stack 服务器和RedisInsight可视化) (6.2.4-v2版本)

    一.使用docker安装(开发适配-提供 Redis Stack 服务器和RedisInsight) (6.2.4-v2版本) 简介 安装命令根据实际部署情况调整 版本地址:官方镜像主页 | 发布版T ...

  7. django文件目录

    例如主站mysite,mysite下有一个应用testapp 1.在mysite/mysite下的settings需要添加应用进去 2.在musite/mysite下的urls.py记录应用的路径 3 ...

  8. CImage类使用

    前言          CImage类是基于GDI+的,但是这里为什么要讲归于GDI? 主要是基于这样的考虑: 在GDI+环境中,我们可以直接使用GDI+ ,没多少必要再使用CImage类 但是,如果 ...

  9. [2013年NOIP提高组] 积木大赛

    春春幼儿园举办了一年一度的"积木大赛".今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木 ...

  10. IIS10.0 Web平台安装程序无法安装URL重写工具

    Windows10系统的IIS10.0需要安装URL rewrite重写模块2.0,提示"很遗憾,无法安装下列产品",解决方法: win键+R键,运行regedit,打开注册表编辑 ...