题意:给一个矩阵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].