acwing-1183. 电力(割点Tarjan)

acwing-1183. 电力(割点Tarjan)给定一个由 n 个点 m 条边构成的无向图,请你求出该图删除一个点之后,连通块最多有多少。输入格式输入包含多组数据。每组数据第一行包含两个整数 n,m。接下来 m 行,每行包含两个整数 a,b,表示 a,b 两点之间有边连接。数据保证无重边。点的编号从 0 到 n−1。读入以一行 0 0 结束。输出格式每组数据输出一个结果,占一行,表示连通块的最大数量。数据范围1≤n≤10000,0≤m≤15000,0≤a,b<n输入样例:3 30 10 22 14 20 1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个由 n 个点 m 条边构成的无向图,请你求出该图删除一个点之后,连通块最多有多少。

输入格式
输入包含多组数据。

每组数据第一行包含两个整数 n,m。

接下来 m 行,每行包含两个整数 a,b,表示 a,b 两点之间有边连接。

数据保证无重边。

点的编号从 0 到 n−1。

读入以一行 0 0 结束。

输出格式
每组数据输出一个结果,占一行,表示连通块的最大数量。

数据范围
1≤n≤10000,
0≤m≤15000,
0≤a,b<n

输入样例:
3 3
0 1
0 2
2 1
4 2
0 1
2 3
3 1
1 0
0 0
输出样例:
1
2
2
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
const int M = 3e4 + 10;
struct Edge{ 
   
    int v,next;
}edge[M];
int head[N],cnt;
void add(int u,int v){ 
   
    edge[cnt].v = v;
    edge[cnt].next = head[u];
    head[u] = cnt ++;
}
int is_cut[N];
int low[N],num[N],dfn;
int Size[N];
int res = 0;
void Tarjan(int u,int fa){ 
   
    low[u] = num[u] = ++dfn;
    int child = 0;
    Size[u] = 1;
    for(int i = head[u];~i;i = edge[i].next){ 
   
        int v = edge[i].v;
        if(v == fa)continue;
        if(!num[v]){ 
   
            child ++;
            Tarjan(v,u);
            if(low[v] >= num[u]){ 
   
                if(fa != -1)is_cut[u] = true;
                Size[u] ++;
            }
            low[u] = min(low[u],low[v]);
        }else low[u] = min(low[u],num[v]);
    }
    if(child >= 2 && fa == -1)is_cut[u] = true;
    if(fa == - 1)res = max(res,child);
    else res = max(Size[u],res);
}
int main(){ 
   
    int n,m;
    while(cin>>n>>m,n || m){ 
   
        memset(head,-1,sizeof head);
        memset(low,0,sizeof low);
        memset(num,0,sizeof low);
        memset(is_cut,0,sizeof is_cut);
        cnt = 0;
        res = 0;
        int x,y;
        for(int i = 0;i < m;i ++){ 
   
            cin>>x>>y;
            add(x,y),add(y,x);
        }
        int c = 0;
        for(int i = 0;i <= n - 1;i ++){ 
   
            if(!num[i]){ 
   
                c ++;
                Tarjan(i,-1);
            }
        }
        cout<<res + c - 1<<endl;
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168616.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简单的制作一个钓鱼网页游戏_简单网页制作代码

    简单的制作一个钓鱼网页游戏_简单网页制作代码网络钓鱼,一个价值很高的词语!如果你曾读过我的一篇文章《价值30亿美元的资料被窃取,网络钓鱼到底有多可怕!》就会知道,网络钓鱼到底有多”值钱”!如果对网络钓鱼这个词进行解释的话,简而言之,其就是一种黑客手段,或者是一种通过假装自己是受信任的实体来欺骗他人来获取凭据(账号、密码等信息)的方法。讲白话,都能听懂的就是去仿作一个和正规网站一样的登录页面,欺骗用户进行输入从而达到获取信息的目的!…

    2022年8月24日
    8
  • java帝国的崛起[通俗易懂]

    java帝国的崛起[通俗易懂]1C语言帝国的统治现在是公元1995年,C语言帝国已经统治了我们20多年,实在是太久了。 1972年,随着C语言的诞生和Unix的问世,帝国迅速建立统治,从北美到欧洲,从欧洲到亚洲, 无数程序员臣服在他的脚下。帝国给我们提供了极好的福利:贴近硬件, 运行极快,效率极高。 使用这些福利…

    2022年9月24日
    3
  • android之IntentFilter的用法_Intent.ACTION_TIME_TICK在manifest.xml不起作用

    在模仿一个天气预报的widget时候,用到了IntentFilter,感觉在manifest.xml注册的receiver跟用代码写registerReceiver()的效果应该是相同的,于是想证明一下,就写了如下一段程序:MainActivity:public class MainActivity extends Activity { public static final i

    2022年3月10日
    44
  • javascript html转换成markdown,如何使用Turndown使用JavaScript将HTML转换为Markdown[通俗易懂]

    javascript html转换成markdown,如何使用Turndown使用JavaScript将HTML转换为Markdown[通俗易懂]本文概述许多项目不是从定义的结构开始,而是随着时间的流逝而变化。例如,一个基本博客可能从一开始就使用HTML格式将其内容存储在数据库中,但是由于其简单性,总有一天某人可能希望开始使用Markdown而不是HTML,在这种情况下,你需要从一种格式转换为另一种格式。如果你将服务器端逻辑与JavaScript(Node.js)一起使用,甚至直接在浏览器中将HTML转换为编辑器中的Markd…

    2025年10月5日
    2
  • Jenkins部署及使用(安装maven配置阿里云镜像、git工具)

    Jenkins部署及使用(安装maven配置阿里云镜像、git工具)

    2021年5月30日
    140
  • JavaWeb-过滤器Filter学习(四)敏感词过滤实例

    JavaWeb-过滤器Filter学习(四)敏感词过滤实例通过Filter来实现留言板的敏感词过滤…思路很简单,我们这里的敏感词是直接先放进去的,实际项目中,肯定是存在数据库中。在Filter过滤器中,我们先拿到用户提交的留言,如果出现了敏感词,我们就用*号来替换。代码演示:index.jsp:<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibur

    2022年5月27日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号