CF(Strictly Positive Matrix) 强连通分量

该博客探讨了一类特殊矩阵(保证每个元素非负且对角线元素为正)的问题,即是否存在某个正整数k,使得矩阵的k次幂中所有元素都大于0。本质是转化为图论中的强连通分量问题,判断图中每个节点是否都能通过多次乘法操作到达其他所有节点。博主采用了tarjan算法模板来解决这个问题。
摘要由CSDN通过智能技术生成

题意:给一个矩阵A,保证Aij大于等于0,并且所有的Aii大于零。问是否存在k使得A^k中的每个元素大于0;


解法:比赛时没有想到,其实就是求整个图是否是一个强连通分量。题意保证自己可到达自己,即转化为了,经过若干次相乘运算,每个点都能到达所有其他所有点。用的是tajran模版。


解法:

#include <iostream>
#include <cstring>
#include <stdio.h>
#include <vector>

using namespace std;
const int MAXN = 20010;//点数
const int MAXM = 5001000;//边数
struct Edge
{
    int to,next;
} edge[MAXM];
int head[MAXN],tot;
int Low[MAXN],DFN[MAXN],Stack[MAXN],Belong[MAXN];//Belong数组的值是1~scc
int Index,top;
int scc;//强连通分量的个数
bool Instack[MAXN];
int num[MAXN];//各个强连通分量包含点的个数,数组编号1~scc
//num数组不一定需要,结合实际情况
void addedge(int u,int v)
{
    edge[tot].to = v;
    edge[tot].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值