POJ 3352 边双联通

点击打开链接

题意:题目很长不说了,就是求加几条边后,任意删除一条边后,图还是联通的

思路:边双联通分量的定义就是删除一条边后图仍联通,这里推荐这篇点这里写的很详细,而这题就是推荐文章中的构造双联通图中桥的方法,那么我们直接引用,证明看那篇文章把,对于一个联通图,我们求出所有桥,求桥的方法与割点类似,都是求出low和dfs数组完成,我的代码中是L和E数组,将桥删除后的图肯定是多个联通块,而每个块肯定是一个双联通子图,这由桥的定义可以看出来,然后将每一块缩成一个点,连起来后找到度为1的点的个数+1再除2就是结果,推荐文章中有证明

#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=1050;
vector<int>G[maxn];
int L[maxn],cnt[maxn],vis[maxn];
int n,m,k;
void dfs(int x,int fa){
    vis[x]=1;L[x]=k++;
    for(unsigned int i=0;i<G[x].size();i++){
        int t=G[x][i];
        if(t==fa) continue;
        if(!vis[t]) dfs(t,x);
        L[x]=min(L[x],L[t]);
    }
}
int tarjan(){
    k=0;dfs(1,1);
    for(int i=1;i<=n;i++){
        for(unsigned int j=0;j<G[i].size();j++){
            int t=G[i][j];
            if(L[i]!=L[t]){
                cnt[L[i]]++;
            }
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        if(cnt[i]==1) ans++;
    }
    return (ans+1)/2;
}
int v[maxn][maxn];
int main(){
    int a,b;
    while(scanf("%d%d",&n,&m)!=-1){
        for(int i=0;i<maxn;i++){
            G[i].clear();cnt[i]=0;
        }
        memset(vis,0,sizeof(vis));
        for(int i=0;i<m;i++){
            scanf("%d%d",&a,&b);
            G[a].push_back(b);
            G[b].push_back(a);
        }
        int ans=tarjan();
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-08 08:46:12

POJ 3352 边双联通的相关文章

Road Construction POJ - 3352 (边双连通分量)

Road Construction POJ - 3352 题意:一个无向图(无重边),问至少还要加多少边使得去掉任意一条边后任意两点仍可互达. 无向图的边双连通分量(无重边) 先用一次dfs标记出割边,然后dfs标记出各联通分量 再根据割边,缩点重新建图,生成一颗树 则答案就是(叶子树+1)/2. 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring

【POJ 2942】Knights of the Round Table(双联通分量+染色判奇环)

[POJ 2942]Knights of the Round Table(双联通分量+染色判奇环) Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 11661   Accepted: 3824 Description Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, an

POJ 3352 Road Construction 使得无向图边变双连通图

点击打开链接 Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8168   Accepted: 4106 Description It's almost summer time, and that means that it's almost summer construction time! This year, the good people who are in charge of

poj 3352 求 边-双连通分量

[题意] 给出一张无向连通图,求至少连几条边可以变成边双连通图 [思路]求出边-双连通分量,缩点就成了一棵树,求这棵树里的出度为1 的点num  结果是(num-1)/2; 1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 #include<stack> 5 #include<vector> 6 using namespace std; 7 int pre[1002],

POJ 3177 Redundant Paths POJ 3352 Road Construction(双连通)

POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的,一份代码能交,给定一个连通无向图,问加几条边能使得图变成一个双连通图 思路:先求双连通,缩点后,计算入度为1的个数,然后(个数 + 1) / 2 就是答案(这题由于是只有一个连通块所以可以这么搞,如果有多个,就不能这样搞了) 代码: #include <cstdio> #include <cstring> #include <algorithm&

POJ 3352 &amp; 3177 无向图的边-双连通分量(无重边 &amp; 重边)

无向图的边-双连通分量 无向图的双连通分量实际上包含两个内容:点-双连通分量.边-双连通分量 点-双连通分量是指:在该连通分量里面,任意两个点之间有多条点不重复的路径(不包括起点.终点) 边-双连通分量是指:在该连通分量里面,任意两个点之间有多条边不重复的路径 在求解点-双连通分量时,无向图有没有重边都没有关系,因为一个点只能经过一次(有重边也无妨) 该篇文章并不深入讨论点-双连通分量,给出代码给有兴趣的参考参考:(也可以看看POJ2942这道题, 解题报告) /*===============

poj 3177 Redundant Paths (双联通)

/******************************************************* 题目:Redundant Paths (poj 2177) 链接:http://poj.org/problem?id=3177 算法:双联通+缩点 思路:先找出所有双联通分量,把这些分量缩成一个点 再找出所有度为一的点,用这些点数加一除2就可以了 ********************************************************/ #include<cs

POJ 3352 Road Construction POJ 3177 Redundant Paths(边双连通图 Tarjan+缩点)

POJ 3352 Road Construction POJ 3177 Redundant Paths(边双连通图 Tarjan+缩点) ACM 题目地址: POJ 3352 Road Construction POJ 3177 Redundant Paths 题意: 问要添加几条边才能使所给无向图图变成边双连通图. 分析: 边连通度:使无向图G不连通的最少删边数量为其边连通度. 边双连通图:边连通度大于1的无向图. 首先缩点,让图变成一个DAG. 现在问题转化为:在树中至少添加多少条边能使图变

POJ 3177 Redundant Paths(边双联通图)

Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1..F) to another field, Bessie and the rest of the herd are forced to cross near the Tree of Rotten Apples. The cows are now tired of often being forc