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,弱连通相关推荐

  1. POJ2762(判断无向图的弱连通)

    题目:http://poj.org/problem?id=2762 题意:给出n个山洞,对于每个山洞,如果任意选择两点s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No. 分析:实 ...

  2. 弱连通和强连通_基本图论-连通分量(强/弱联通 割点/边 边/点双)

    前言 网上现存\(60\%\)的文章都有明显的误区,本文章经过多次修改,能保证正确性 本文涉及强连通分量.弱连通分量.割点.割边.边双.点双,属于基本图论范畴 在有着直接关联的基础上又有所不同,本文基 ...

  3. 弱连通和强连通_什么叫:强连通 单向连通 弱连通 不连通

    展开全部 下面是这强连通.单向连通.弱连通.不连通的定义: 连通分量:无向图e68a84e8a2ad3231313335323631343130323136353331333431346463 G的一 ...

  4. 有向加权图 最大弱连通分支_买入加权组合式等价对敲

    买入加权组合式等价对敲_交易解码:外汇.黄金.大宗商品.股票投资技巧 第十六节 买入加权组合式等价对敲 如果你觉得未来行情将出现大的波动且上涨可能性较大,那么您可以选用买入加权组合式等价对敲.尽管这种 ...

  5. 有向加权图 最大弱连通分支_开盘引来大涨,当下股市最大的风险是它?

    何为昨天的大涨定性? 昨天的大涨,上午的加权量能水平达到了2921亿元,一个非常健康的温和放量状态:下午的加权量能水平快速下降到2242亿元的水平,这是略高于五日均量的量能水平:大幅高开,集合竞价成交 ...

  6. 有向加权图 最大弱连通分支_指数基金介绍专栏:指数基金的加权方式,你都知道哪些?...

    有朋友问牛大,指数基金的加权方式有哪些? 今天,牛大就和大家聊一聊. 朋友们知道,咱们购买的指数基金,本质是一篮子股票组成的. 比如沪深300指数,是由300只股票通过一定方式综合计算得出的.中证红利 ...

  7. 有向加权图 最大弱连通分支_图论与图学习(一):图的基本概念

    图(graph)近来正逐渐变成机器学习的一大核心领域,比如你可以通过预测潜在的连接来理解社交网络的结构.检测欺诈.理解汽车租赁服务的消费者行为或进行实时推荐.近日,数据科学家 Maël Fabien ...

  8. 弱连通和强连通_判断强连通图、单向连通图、弱连通图

    判断一个图是否为强连通图.单向连通图.弱连通图.输入为有向图的邻接矩阵. 输入 输入有若干行 第一行为正整数N(0 接下来N行,每行有N个数据,每个数据以空格分隔,代表邻接矩阵. 注意:输入的都是连通 ...

  9. POJ2762 Going from u to v or from v to u? 强连通+缩点

    题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足   随意两点ab 都能 从a到达b 或  从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...

最新文章

  1. ScheduledExecutorService
  2. android java split_Java中的split函数的用法
  3. (转)GDB 使用方法
  4. mysql connector net 6.9.3_MySQL Connector/Net 6.9.3 发布 MySQL Connector/Net 6.9.3下载
  5. SpringBoot属性绑定内部原理(ok)
  6. 天线下倾角示意图_天线下倾角地计算方法
  7. 仅为代码实际运行资源付费 解构国内首个函数计算
  8. 并联串联混合的电压和电流_如何从本质上判断电压表测量谁的电压?
  9. Windows上Dos命令操作文件及文件夹
  10. Win10,Python 3.6环境下安装PyQt4
  11. 什么是JSTL和EL表达式
  12. mysql怎么画继承_UML类图(上):类、继承和实现
  13. 英语3500词(15/20)crime主题(2022.1.27)
  14. Java笔试/面试题
  15. Flare Network,跨越互操作性三难困境
  16. HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者
  17. 从 “搞不清楚” 到 “都明白了” 的费曼
  18. CFD软件开发漫谈-1: 整体规划
  19. __attribute__((used)) __attribute__((section(x)))
  20. [附源码]JAVA毕业设计基于web旅游网站的设计与实现(系统+LW)

热门文章

  1. ELMo解读(论文 + PyTorch源码)
  2. LeetCode简单题之位1的个数
  3. Jeff Dean回顾谷歌2021
  4. BEP 7:CUDA外部内存管理插件(下)
  5. runtime系统的Cello
  6. NVIDIA空中导航SDK改造5G通信
  7. CVPR2019论文解读:单眼提升2D检测到6D姿势和度量形状
  8. java正则表达式 匹配%号_java正则表达式匹配带有括号的电话号为什么匹配不上...
  9. RxJava 过滤操作符skip 与 skipLast
  10. getElementById 使用