hdu 4587 TWO NODES(强连通分量)
来源:互联网 发布:淘宝卖家注册流程 编辑:程序博客网 时间:2024/06/07 00:51
强连通分量的应用,枚举每两个点(枚举第二个点可以在递归中完成)
#include <cstdio>#include <iostream>#include <vector>#include <bitset>#include <algorithm>using namespace std;const int MAXN = 5005;int head[MAXN], ee;int n, m, res;int dfn[MAXN], low[MAXN], df, mdel, mt[MAXN];struct _edge{int v, next;}edge[MAXN<<1];void add(int u, int v){edge[ee].v = v; edge[ee].next = head[u]; head[u] = ee++; }void dfs(int u, int pre){int cnt = 0;dfn[u] = low[u] = ++df;for (int i = head[u]; ~i; i=edge[i].next){int v = edge[i].v;if (mdel == v || v == pre)continue; if (dfn[v]){low[u] = min(low[u], low[v]);}else{dfs(v, u);low[u] = min(low[u], low[v]);if (low[v] >= dfn[u]){++cnt;}}}if (pre == -1){--cnt;}mt[u] = cnt;}int main() {#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin);#endifwhile (scanf("%d%d", &n, &m) != EOF){memset(head, -1, sizeof head);ee = 0;for (int i = 0; i < m; ++i){int u, v;scanf("%d%d", &u, &v);add(u, v);add(v, u);}res = -1;int sum = 0;for (int i = 0; i< n; ++i){mdel = i;sum = 0;memset(dfn, 0, sizeof dfn);df = 1;for (int j = 0; j< n; ++j){if (mdel == j || dfn[j]) continue;sum ++;dfs(j, -1);}for (int j = 0; j< n; ++j){if (mdel == j) continue;res = max(res, mt[j]+sum);}}printf("%d\n", res);} return 0;}
0 0
- hdu 4587 TWO NODES(强连通分量)
- HDU 4587 TWO NODES 删除两个点求连通分量
- hdu 4587 (求强连通分量)
- hdu 4635(强连通分量)
- HDU 6038 Function(强连通分量)
- hdu 3072(强连通分量)
- hdu 2767(强连通分量)
- hdu 1269 强连通分量
- HDU 1827 强连通分量
- HDU 1269 强连通分量
- hdu-4612-强连通分量
- HDU 2767 强连通分量
- hdu 2767强连通分量
- HDU 1236 强连通分量
- hdu 1827强连通分量
- HDU 5934 强连通分量
- HDU 5934 强连通分量
- hdu 1269+hdu 2767(强连通分量)
- Sql Server 2005 怎么就不能用Windows身份验证方式登录呢?
- 集合
- 人际关系中的“楚河汉界”
- 继承
- 接口
- hdu 4587 TWO NODES(强连通分量)
- MyEclipse快捷键
- 类
- wekit
- 流程控制
- 枚举
- 内部类和包装类
- 三大修饰符
- 设计模式