Hiho1186/ 第五十五周 连通性·四 点双连通分量

题意:

给出一幅n个点m条边的连通图 求图中有几个点双连通分量

并输出每条边所在点双连通分量中所有边的编号最小边的编号

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 20050
#define maxm 200050
using namespace std;
struct node{
    int id,to,next;
}edge[maxm];
int head[maxn];
int s;

int num,dfn[maxn],low[maxn];

int sta[maxm],top;

int belong[maxm],temp[maxm],block,vis[maxn*5];

void Tarjan(int u,int pre)
{
    dfn[u]=low[u]=++num;
    for(int i=head[u];i!=-1;i=edge[i].next)
    {
        int v=edge[i].to;
        if(vis[edge[i].id])     //已标记的边不能通过同一条边的反向边再次访问
            continue;
        if(!dfn[v])
        {
            sta[top++]=edge[i].id;     //边入栈
            Tarjan(v,u);
            low[u]=min(low[v],low[u]);
            if(dfn[u]<=low[v])
            {
                block++;
                int d=-1,s=0,minn=maxm;
                while(d!=edge[i].id)
                {
                    d=sta[--top];
                    temp[s++]=d;
                    vis[d]=1;        //标记边
                    if(d<minn)
                        minn=d;
                }
                for(int i=0;i<s;i++)
                    belong[temp[i]]=minn;
            }
        }
        else if(v!=pre){
            sta[top++]=edge[i].id;        //边入栈
            low[u]=min(dfn[v],low[u]);

        }
    }
}

void init()
{
    memset(vis,0,sizeof(vis));
    memset(head,-1,sizeof(head));
    memset(dfn,0,sizeof(dfn));
    memset(belong,0,sizeof(belong));
    s=top=num=block=0;
}

int main()
{
//    freopen("in.txt","r",stdin);
    int n,m,a,b;
    scanf("%d%d",&n,&m);
    init();
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&a,&b);
        edge[s]={i,b,head[a]};
        head[a]=s++;
        edge[s]={i,a,head[b]};
        head[b]=s++;
    }
    Tarjan(1,-1);
    printf("%d\n",block);
    for(int i=1;i<=m;i++)
        printf("%d ",belong[i]);
    cout<<endl;
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 23:33:08

Hiho1186/ 第五十五周 连通性·四 点双连通分量的相关文章

[hihoCoder] 第五十二周: 连通性&#183;一

题目1 : 连通性·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢失.为了避免再次出现这样的情况,学校决定对校园网络进行重新设计. 学校现在一共拥有N台服务器(编号1..N)以及M条连接,保证了任意两台服务器之间都能够通过连接直接或者间接的数据通讯. 当发生黑客攻击时,学校会立刻切断网络中的一条连接或是立刻关闭一台服务器,使得整个网络被隔离成两个独立的部分. 举个例子,对于以下

第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行一个函数 dispatcher.connect()信号分发器,第一个参数信号触发函数,第二个参数是触发信号, signals.engine_started当Scrapy引擎启动爬取时发送该信号.该信号支持返回deferreds.signals.engine_stopped当Scrapy引擎停止时发送

QT开发(五十五)———Qt Quick Controls

QT开发(五十五)---Qt Quick Controls 一.Qt Quick Controls基础 QT5.1发布了Qt Quick的一个全新模块:Qt Quick Controls.Qt Quick Controls模块提供了大量类似Qt Widgets模块的可重用组件. 为了开发基于Qt Quick Controls的程序,需要创建一个Qt Quick Application类型的应用程序,选择组件集的时候注意选择Qt Quick Controls. 二.Qt Quick Control

“全栈2019”Java第五十五章:方法的静态绑定与动态绑定

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第五十五章:方法的静态绑定与动态绑定 下一章 "全栈2019"Java第五十六章:多态与字段详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&q

hihocoder #1190 : 连通性&#183;四 点双联通分量

http://hihocoder.com/problemset/problem/1190?sid=1051696 先抄袭一下 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho从约翰家回到学校时,网络所的老师又找到了小Hi和小Ho. 老师告诉小Hi和小Ho:之前的分组出了点问题,当服务器(上次是连接)发生宕机的时候,在同一组的服务器有可能连接不上,所以他们希望重新进行一次分组.这一次老师希望对连接进行分组,并把一个组内的所有连接关联的服务器也视为这个组内

第五十五课、经典问题解析四

一.new和malloc.delete和free之间的区别 1.new和malloc (1).new关键字是c++的一部分             malloc是c库提供的函数 (2).new是以具体类型为单位分配内存             malloc是以字节为单位分配内存 (3).new在申请内存空间时可进行初始化 malloc仅根据需要申请定量的内存空间 (4).new在所有c++编译器中都被支持             malloc在某些系统开发中是不能调用的 (5).new能触发构造

上班的第四百五十五天

今天李娇回来了,神一般的测试人员,啪啦啪啦啪啦地一堆bug就出来了,处女座真心恐怖啊. 看着那堆bug,说实话,我好想把它们都解决了,或许这就是程序员的强迫症,不知道把这一点写在简历上会不会加点分呢?话说,昨晚写简历的时候,发现有点动不了笔的感觉,因为我想找的是ios的工作,可是我一个可以拿出的ios实例都没有,还找个毛线?看来赶紧把APP写出来是迫在眉毛的事情了.今天还买了个土豪金,1.5k,水货,明天就来了.第一次在58同城网买东西,如果被骗了就悲剧了,一定要检查清楚才行. 今晚还和君爷去体

hiho一下 第五十九周 题目1 : Performance Log

题目1 : Performance Log 时间限制:8000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a txt file, which is performance logs of a single-threaded program. Each line has three columns as follow: [Function Name] [TimeStamp] [Action] [FunctionName] is a string of le

hiho一下 第五十八周 Beautiful String dp

题目1 : Beautiful String 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 We say a string is beautiful if it has the equal amount of 3 or more continuous letters (in increasing order.) Here are some example of valid beautiful strings: "abc", "cde"