首页 > 其他分享 >P8436 【模板】边双连通分量

P8436 【模板】边双连通分量

时间:2022-11-16 15:36:21浏览次数:74  
标签:bridge 边双 int vis dfn low P8436 now 模板

P8436 【模板】边双连通分量

//这个是看边和点,而不是看点和点
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+5;
const int M=2e6+5;

int h[N],ne[M<<1],e[M<<1],tot;
void add(int from,int to) {
    e[tot]=to;
    ne[tot]=h[from];
    h[from]=tot++;
}

int dfn[N],low[N],cnt;
int id[N],scnt;
stack<int>st;
bool vis[N],bridge[M<<1];
int sum[N];
vector<int>ans[N];

void tarjan(int now,int E) {
    dfn[now]=low[now]=++cnt;
    st.push(now);
    vis[now]=1;
    for(int i=h[now];i!=-1;i=ne[i]) {
        int to=e[i];
        if(dfn[to]==0) {
            tarjan(to,i);
            low[now]=min(low[now],low[to]);
            //if(low[to]>dfn[now])
            //    bridge[i]=bridge[i^1]=1;
        }
        else if(i!=(1^E))
            low[now]=min(low[now],dfn[to]);
    }
    if(dfn[now]==low[now]) {
        scnt++;
        while(1) {
            int k=st.top();
            st.pop();
            vis[k]=0;
            id[k]=scnt;
            sum[id[k]]++;
            ans[id[k]].push_back(k);
            if(k==now)break;
        }
    }
}

int main() {
    int n,m;
    cin>>n>>m;
    memset(h,-1,sizeof(h));
    while(m--) {
        int x,y;
        cin>>x>>y;
        add(x,y);
        add(y,x);
    }
    for(int i=1;i<=n;i++)
        if(dfn[i]==0)tarjan(i,-1);
    cout<<scnt<<endl;
    for(int i=1;i<=scnt;i++) {
        cout<<sum[i]<<' ';
        for(auto x:ans[i])cout<<x<<' ';
        cout<<endl;
    }
    return 0;
}

标签:bridge,边双,int,vis,dfn,low,P8436,now,模板
From: https://www.cnblogs.com/basicecho/p/16896025.html

相关文章

  • 4.django-模板
    在django中,模板引擎(DTL)是一种可以让开发者将服务端数据填充到html页面中的完成渲染的技术模板引擎的原理分为以下三步:在项目配置文件中指定保存模板文件的的模板目录,一......
  • P8435 【模板】点双连通分量
    P8435【模板】点双连通分量#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+5;constintM=4e6+6;inth[N],ne[M],e[M],tot;voidadd(intfrom,int......
  • Word13 《经费联审结算单》模板office真题
    1.根据题目一的要求,打开素材文件,点击【文件】-【另存为】,选择【当前文件夹】,命名为Word。   2.根据题目二的要求,在【布局】里点击【页面设置】的右下角,打开页面设......
  • C++模板——函数模板
    1.1定义函数模板1.2使用函数模板1.3两阶段翻译Two-PhaseTranslation1.3.1模板的编译和链接问题1.4多模板参数1.4.1引入额外模板参数作为返回值类型1.4.......
  • 算法基础:离散化及模板详解
    ⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零基础但有......
  • <一>函数模板
    函数模板模板的意义:对类型也参数化intsum1(inta,intb){returna+b;}doublesum2(doublea,doubleb){returna+b;}几个概念函数模板模板的实例化模板函数模板......
  • SpringBoot 10: SpringBoot使用Thymeleaf模板引擎替代jsp
    Thymeleaf模板引擎简介Thymeleaf:是使用java开发的模板技术,在服务器端运行,把处理后的数据发送给浏览器模板是作视图层工作的,用来显示数据的Thymeleaf是基于Html语言的......
  • 压位高精度模板
    压位高精全家桶。原代码来自于知乎上人形魔芋的压位高精模板,进行了一些修改和改进。namespaceBigInteger{typedeflonglongll;typedefunsignedlonglong......
  • 模板:4个数码管动态显示精简方法
    示例:分秒表原始方法:查看代码unsignedcharSMG[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};voiddisp(unsignedintj,k){ P2=0XEF;//P24数码......
  • 势能分块模板
    分块:把n分成sqrt(n)块,中间整体修改,2边暴力修改即可,修改,查询的复杂度为3sqr(n);比线段树好写一些?当然整体的修改的时候,有时候要用lz去处理, 和势能线段树......