#include <bits/stdc++.h>
using namespace std; const int N = ;
const int M = ; struct Edge {
int to, next;
} edge[M];
int head[N];
int cntE;
void addedge(int u, int v) {
edge[cntE].to = v; edge[cntE].next = head[u]; head[u] = cntE++;
edge[cntE].to = u; edge[cntE].next = head[v]; head[v] = cntE++;
} int dfn[N], low[N], idx;
int stk[N], top;
bool cut[N];
int block[N];
// 一个割点可能在很多个连通分量
// 如果一个双连通分量内的某些顶点在一个奇圈中(即双连通分量含有奇圈
// 那么这个双连通分量的其他顶点也在某个奇圈中
// 如果一个双连通分量含有奇圈,则他必定不是一个二分图。反过来也成立,这是一个充要条件。
int no;
// block[i] 是去掉i这个节点能够多几个联通块
void tarjan(int u, int fa) {
dfn[u] = low[u] = ++idx;
stk[top++] = u;
block[u] = ;
int son = ;
for (int i = head[u]; ~i; i = edge[i].next) {
int v = edge[i].to;
if (v == fa || v == no) continue;
if (!dfn[v]) {
son++;
tarjan(v, u);
low[u] = min(low[u], low[v]);
if (u != fa && low[v] >= dfn[u]) {
cut[u] = true;
block[u]++;
}
/* 求每一个连通分量
if (low[v] >= dfn[u]) { int x;
do {
x = stk[--top];
push(x);
} while (x != v);
push(u);
}
*/
} else {
low[u] = min(low[u], dfn[v]);
}
}
if (u == fa) {
if (son > ) cut[u] = ;
block[u] = son-;
}
} void init() {
memset(dfn, , sizeof dfn);
top = idx = cntE = ;
} int main()
{
int n, m;
while (~scanf("%d%d", &n, &m)) {
int u, v;
memset(head, -, sizeof head);
for (int i = ; i < m; ++i) {
scanf("%d%d", &u, &v);
addedge(u, v);
}
int ans = ;
for (u = ; u < n; ++u) {
init(); int cnt = ; no = u;
for (v = ; v < n; ++v) {
if (v != u && !dfn[v]) {
tarjan(v, v);
cnt++;
}
}
for (v = ; v < n; ++v) {
if (v != u) ans = max(ans, cnt + block[v]);
}
}
printf("%d\n", ans);
}
return ;
}

最新文章

  1. sql2008“备份集中的数据库备份与现有的xx数据库不同”解决方法
  2. java sound初探
  3. Redis五种数据结构简介
  4. RequireJS 基础(一)
  5. nodeType的12种类型
  6. 【BZOJ-3196】二逼平衡树 线段树 + Splay (线段树套平衡树)
  7. RichTextBox文字处理控件属性介绍
  8. delphi中获取调用堆栈信息
  9. JavaScript--变量、作用域及内存(12)
  10. elasearch 版本控制
  11. Linux设置开放一个端口
  12. Python 调用 C# dll库最简方法
  13. AtCoder Beginner Contest 088 (ABC)
  14. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
  15. Hybrid APP架构设计思路
  16. 你真的懂Handler.postDelayed()的原理吗?
  17. ARM_Instruction_Set_Encoding_hacking(ARM指令集编码格式解读)
  18. Golang之时间、日期类型
  19. PACS系统简易
  20. 简单的java程序

热门文章

  1. Android 图片旋转(使用Matrix.setRotate方法)
  2. Android 获取JSP或ASP的sessionId(Cookie)
  3. jvisualvm 使用
  4. 好看的游戏soul calibur
  5. Web开发的绝美网站
  6. Python生成器与yield
  7. TSharding:用于蘑菇街交易平台的分库分表组件
  8. 4418SPI2对应管脚位置
  9. 数据结构———KMP
  10. 设计模式 - interpreter