CF402E Strictly Positive Matrix 传递闭包用强连通分量判断
题目链接:http://codeforces.com/problemset/problem/402/E
- /**算法分析:
- 这道题考察了图论基本知识,就是传递闭包,可以构图用强联通分量来判断
- */
- #include<bits/stdc++.h>
- #define MAXN 2005
- #define PI acos(-1.0)
- #define REP(i,n) for(int i=0; i<n; i++)
- #define FOR(i,s,t) for(int i=s; i<=t; i++)
- #define mem(a,b) memset(a,b,sizeof(a))
- #define show(x) { cerr<<">>>"<<#x<<" = "<<x<<endl; }
- #define showtwo(x,y) { cerr<<">>>"<<#x<<"="<<x<<" "<<#y<<" = "<<y<<endl; }
- using namespace std;
- bool G[MAXN][MAXN]; //正向图
- bool rG[MAXN][MAXN]; //反向图
- vector<int> s;
- bool vis[MAXN];
- int n;
- void dfs(int u)
- {
- vis[u] = true;
- FOR(i,,n) if(G[u][i] && !vis[i])
- dfs(i);
- s.push_back(u);
- }
- void rdfs(int u)
- {
- vis[u] = true;
- FOR(i,,n) if(rG[u][i] && !vis[i])
- rdfs(i);
- }
- bool scc()
- {
- s.clear();
- mem(vis,); dfs();
- FOR(i,,n) if(!vis[i]) return false;
- mem(vis,); rdfs(s[n-]);
- for(int i=n-;i>=; i--)
- if(!vis[s[i]]) return false;
- return true;
- }
- int main()
- {
- //freopen("E:\\acm\\input.txt","r",stdin);
- mem(G,); mem(rG,);
- cin>>n;
- FOR(i,,n) FOR(j,,n)
- {
- int a; scanf("%d",&a);
- if(i == j) continue;
- if(a>) G[i][j] = true,rG[j][i] = true;
- }
- if(scc()) printf("YES\n");
- else printf("NO\n");
- }
CF402E Strictly Positive Matrix 传递闭包用强连通分量判断的更多相关文章
- CF402E Strictly Positive Matrix(矩阵,强联通分量)
题意 给定一个 n∗n 的矩阵 A,每个元素都非负判断是否存在一个整数 k 使得 A^k 的所有元素 >0 n≤2000(矩阵中[i][i]保证为1) 题解 考虑矩阵$A*A$的意义 ,设得到的 ...
- [CF #236 (Div. 2) E] Strictly Positive Matrix(强联通分量)
题目:http://codeforces.com/contest/402/problem/E 题意:给你一个矩阵a,判断是否存在k,使得a^k这个矩阵全部元素都大于0 分析:把矩阵当作01矩阵,超过1 ...
- CodeForces 402 E Strictly Positive Matrix
Strictly Positive Matrix 题解: 如果原来的 a[i][j] = 0, 现要 a[i][j] = 1, 那么等于 sum{a[i][k] + a[k][j]} > 1. ...
- Codeforces Round #236 (Div. 2)E. Strictly Positive Matrix(402E)
E. Strictly Positive Matrix You have matrix a of size n × n. Let's number the rows of the matrix f ...
- codeforces 402E - Strictly Positive Matrix【tarjan】
首先认识一下01邻接矩阵k次幂的意义:经过k条边(x,y)之间的路径条数 所以可以把矩阵当成邻接矩阵,全是>0的话意味着两两之间都能相连,也就是整个都要在一个强连通分量里,所以直接tarjan染 ...
- [CF] 402 E. Strictly Positive Matrix
一个矩阵,自乘无限次后能否全为正数? 如果n比较小,可以二分一下,但是这里n很大,乘一次都无法接受 可以考虑实际含义:矩阵看成邻接矩阵,那么0就是没有边,其余就是有边. 我们知道邻接矩阵自乘k次就相当 ...
- Ex3_15 判断图是否是一个强连通分量 判断点是否在汇点强连通分量中_十一次作业
(a) 可以用图中的每一个顶点表示街道中的每个十字路口,由于街道都是单行的,所以图是有向图,若从一个十字路口都有一条合法的路线到另一个十字路口,则图是一个强连通图.即要验证的是图是否是一个强连通图. ...
- POJ1236Network of Schools[强连通分量|缩点]
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16571 Accepted: 65 ...
- POJ 1236 Network of Schools(强连通分量/Tarjan缩点)
传送门 Description A number of schools are connected to a computer network. Agreements have been develo ...
随机推荐
- 更改Keil工程名
假设原工程名为A,需要改成B. 1, 在工程目录下,把A.vuopt和A.uvproj改成B.uvopt和B.uvproj. 2,删除其他A文件. 3,打开工程B.然后修改下面位置: Project ...
- UILabel 属性祥记
创建label UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)]; 设置背景色 label1. ...
- 告诉你KVC的一切-b
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
- 小米1S MIUI V5刷回V4教程
V5确实很漂亮,但是1S只有1G的手机内存,确切说是760M左右的内存,所以运行V5卡的不行.解决小米手机刷回V4卡死在开机MI界面!! 于是,我想回到V4,虽然界面没有V5华丽,菜单没有V5扁平化, ...
- Android版:验证手机号码的正则表达式
http://blog.csdn.net/dai_zhenliang/article/details/8186249 /** * 验证手机格式 */ public static boolean isM ...
- SQL Union和SQL Union All用法
SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每 ...
- POJ 1364 King
http://poj.org/problem?id=1364 题意 :给出一个序列a1,a2,a3,a4.....ai,......at ;然后给你一个不等式使得ai+a(i+1)+a(i+2)+.. ...
- 如何将CELERY放到后台执行?
在作正式环境,这个是必须的. 于是找了两小时文档, 以下这个方法,相对来说好实现. 就是要注意supervisord.conf的目录存放位置. 放在DJANGO的PROJ目录下,是最佳位置. http ...
- Java使用socket实现两人聊天对话
import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /* ...
- 服务器部署_linuix下 一台nginx 多域名之二
第二个需求: 1. 一台服务器部署了三个应用web1~web3对应三个域名:www.web1.com.www.web2.com.www.web3.com ,方法参照我另外一篇文章 2. 如果用非www ...