[CF] 402 E. Strictly Positive Matrix
2024-09-05 02:58:49
一个矩阵,自乘无限次后能否全为正数?
如果n比较小,可以二分一下,但是这里n很大,乘一次都无法接受
可以考虑实际含义:矩阵看成邻接矩阵,那么0就是没有边,其余就是有边。
我们知道邻接矩阵自乘k次就相当于在原图走k步,无限次后是否有0?也就是图能否强连通。
判断就好,整个是环的情况题目限制不存在。
#include<iostream>
#include<cstdio> using namespace std; const int MAXN=; struct Edge{
int next,to;
}e[MAXN*MAXN*];
int ecnt,head[MAXN];
inline void add(int x,int y){
e[++ecnt].to = y;
e[ecnt].next = head[x];
head[x] = ecnt;
} inline int rd(){
int ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} int n; int bl[MAXN],cnt;
int ins[MAXN],sta[MAXN],top;
int dfn[MAXN],low[MAXN],tot;
void tarjan(int x){
dfn[x]=low[x]=++tot;ins[x]=;sta[++top]=x;
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
// cout<<x<<" "<<v<<endl<<endl;
if(!dfn[v]){
tarjan(v);
low[x]=min(low[x],low[v]);
}else if(ins[v]){
low[x]=min(low[x],dfn[v]);
}
}
if(dfn[x]==low[x]){
int elm;cnt++;
do{
elm = sta[top--];
ins[elm] = false;
bl[elm] = cnt;
}while(elm != x);
}
} int main(){
n=rd();int x;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(rd()) add(i,j);
for(int i=;i<=n;i++) if(!dfn[i]) tarjan(i);
if(cnt!=) return puts("NO"),;
puts("YES");
return ;
}
最新文章
- [No00003B]string格式的日期时间字符串转为DateTime类型
- 2016.8.14 HTML5重要标签及其属性学习
- 【LEETCODE OJ】Single Number
- javascript获取以及设置光标位置
- Ogre1.8.1编译时大量warning的问题
- js学习之道:表单验证公共js
- ThinkPHP中视图模型详解.
- 基于CAShapeLayer和贝塞尔曲线的圆形进度条动画
- css基础语法二(常用文本与背景属性)
- Linux 系统裁剪笔记 软盘2
- javafx--tableView笔记-----tableView里已经填充了实体类数据但是很狗血地显示不出来
- box-sizing (摘录)
- vue 中axios 的基本配置和基本概念
- Practical Node.js (2018版) 第10章:Getting Node.js Apps Production Ready
- git commit之后,想撤销commit
- (转)Introduction to Gradient Descent Algorithm (along with variants) in Machine Learning
- sqlserver 数据迁移
- (转)在SDL工程中让SDL_ttf渲染汉字
- Python Django 之 Views HttpRequest HttpReponse
- java MessageFormat.format 用法