poj_2762,弱连通
http://poj.org/problem?id=2762
这题是求弱连通
弱连通就是无向图强连通(基图是有向图)
思路:先targan缩点,然后这些点求最长链
也就是这些点(缩点)在一棵树上,这棵树的深度应该为强连通分量个数。。
画个图就好理解了
#include<cstdio> #include<cstring>const int maxn(1111); struct Edge{int v, next; }e1[maxn*6], e2[maxn*6]; int head1[maxn], cnt1, head2[maxn], cnt2; int low[maxn], dfn[maxn], vis[maxn], belong[maxn]; int stack[maxn], step, color, top; void init(){memset(head1, -1, sizeof head1);cnt1 = cnt2 = 0;memset(head2, -1, sizeof head2);memset(vis, 0, sizeof vis);memset(dfn, 0, sizeof dfn);memset(belong, -1, sizeof belong);step = color = top = 0; } void add_Edge(int u, int v){e1[cnt1].v = v, e1[cnt1].next = head1[u];head1[u] = cnt1 ++; } int n, m; int f[maxn][maxn], ind[maxn];void targan(int u){dfn[u] = low[u] = ++ step;stack[top++] = u;vis[u] = 1;for(int i = head1[u]; i != -1; i = e1[i].next){int v = e1[i].v;if(!dfn[v]){targan(v);if(low[u] > low[v])low[u] = low[v];}elseif(vis[v] && low[u] > dfn[v])low[u] = dfn[v];}if(dfn[u] == low[u]){color ++;int s;do{s = stack[--top];vis[s] = 0;belong[s] = color;}while(s != u);} } void add_edge(int u, int v){e2[cnt2].v = v, e2[cnt2].next = head2[u];head2[u] = cnt2 ++; } int dp[maxn]; int cnt; void dfs(int u){for(int i = head2[u]; i + 1; i = e2[i].next){int v = e2[i].v;if(dp[v] < dp[u] + 1)dp[v] = dp[u] + 1;if(dp[v] > cnt) cnt = dp[v];dfs(v);} } int check(){cnt = 0;int u;for(int i = 1; i <= color; i ++){if(ind[i] == 0){cnt ++;if(cnt > 1) return 0;u = i;}}/*cnt = 1;printf("%d\n", e2[u].next);while(e2[u].next != -1){cnt ++;u = e2[u].v;puts("|asdf");}*/memset(dp, 0, sizeof dp);cnt = 0;dfs(u);if(cnt == color - 1) return 1;return 0; } void solve(){for(int i = 1; i <= n; i ++)if(!dfn[i])targan(i);if(color == 1){puts("Yes");return;}memset(ind, 0, sizeof ind);memset(f, 0, sizeof f);for(int i = 1; i <= n; i ++){for(int j = head1[i]; j + 1; j = e1[j].next){int v = e1[j].v;int u = belong[i];v = belong[v];if(u != v && !f[u][v]){add_edge(u, v);ind[v] ++;f[u][v] = 1;}}}if(check())puts("Yes");elseputs("No"); } int main(){int tcase;scanf("%d", &tcase);while(tcase --){init();scanf("%d%d", &n, &m);while(m --){int u, v;scanf("%d%d", &u, &v);add_Edge(u, v);}solve();}return 0; } /* 1 7 8 1 2 3 1 3 2 2 4 4 7 4 5 5 6 6 4 YES */
转载于:https://www.cnblogs.com/louzhang/archive/2012/09/06/2673224.html
poj_2762,弱连通相关推荐
- POJ2762(判断无向图的弱连通)
题目:http://poj.org/problem?id=2762 题意:给出n个山洞,对于每个山洞,如果任意选择两点s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No. 分析:实 ...
- 弱连通和强连通_基本图论-连通分量(强/弱联通 割点/边 边/点双)
前言 网上现存\(60\%\)的文章都有明显的误区,本文章经过多次修改,能保证正确性 本文涉及强连通分量.弱连通分量.割点.割边.边双.点双,属于基本图论范畴 在有着直接关联的基础上又有所不同,本文基 ...
- 弱连通和强连通_什么叫:强连通 单向连通 弱连通 不连通
展开全部 下面是这强连通.单向连通.弱连通.不连通的定义: 连通分量:无向图e68a84e8a2ad3231313335323631343130323136353331333431346463 G的一 ...
- 有向加权图 最大弱连通分支_买入加权组合式等价对敲
买入加权组合式等价对敲_交易解码:外汇.黄金.大宗商品.股票投资技巧 第十六节 买入加权组合式等价对敲 如果你觉得未来行情将出现大的波动且上涨可能性较大,那么您可以选用买入加权组合式等价对敲.尽管这种 ...
- 有向加权图 最大弱连通分支_开盘引来大涨,当下股市最大的风险是它?
何为昨天的大涨定性? 昨天的大涨,上午的加权量能水平达到了2921亿元,一个非常健康的温和放量状态:下午的加权量能水平快速下降到2242亿元的水平,这是略高于五日均量的量能水平:大幅高开,集合竞价成交 ...
- 有向加权图 最大弱连通分支_指数基金介绍专栏:指数基金的加权方式,你都知道哪些?...
有朋友问牛大,指数基金的加权方式有哪些? 今天,牛大就和大家聊一聊. 朋友们知道,咱们购买的指数基金,本质是一篮子股票组成的. 比如沪深300指数,是由300只股票通过一定方式综合计算得出的.中证红利 ...
- 有向加权图 最大弱连通分支_图论与图学习(一):图的基本概念
图(graph)近来正逐渐变成机器学习的一大核心领域,比如你可以通过预测潜在的连接来理解社交网络的结构.检测欺诈.理解汽车租赁服务的消费者行为或进行实时推荐.近日,数据科学家 Maël Fabien ...
- 弱连通和强连通_判断强连通图、单向连通图、弱连通图
判断一个图是否为强连通图.单向连通图.弱连通图.输入为有向图的邻接矩阵. 输入 输入有若干行 第一行为正整数N(0 接下来N行,每行有N个数据,每个数据以空格分隔,代表邻接矩阵. 注意:输入的都是连通 ...
- POJ2762 Going from u to v or from v to u? 强连通+缩点
题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足 随意两点ab 都能 从a到达b 或 从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...
最新文章
- ScheduledExecutorService
- android java split_Java中的split函数的用法
- (转)GDB 使用方法
- mysql connector net 6.9.3_MySQL Connector/Net 6.9.3 发布 MySQL Connector/Net 6.9.3下载
- SpringBoot属性绑定内部原理(ok)
- 天线下倾角示意图_天线下倾角地计算方法
- 仅为代码实际运行资源付费 解构国内首个函数计算
- 并联串联混合的电压和电流_如何从本质上判断电压表测量谁的电压?
- Windows上Dos命令操作文件及文件夹
- Win10,Python 3.6环境下安装PyQt4
- 什么是JSTL和EL表达式
- mysql怎么画继承_UML类图(上):类、继承和实现
- 英语3500词(15/20)crime主题(2022.1.27)
- Java笔试/面试题
- Flare Network,跨越互操作性三难困境
- HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者
- 从 “搞不清楚” 到 “都明白了” 的费曼
- CFD软件开发漫谈-1: 整体规划
- __attribute__((used)) __attribute__((section(x)))
- [附源码]JAVA毕业设计基于web旅游网站的设计与实现(系统+LW)