首页 > 其他分享 >P2860 [USACO06JAN]Redundant Paths G 题解 ratjan边双连通分量

P2860 [USACO06JAN]Redundant Paths G 题解 ratjan边双连通分量

时间:2023-06-13 21:35:04浏览次数:40  
标签:Paths head 边双 int 题解 ecnt edge low id

题目链接:https://www.luogu.com.cn/problem/P2860

题目大意:

给定一个无向连通图,求至少加几条边,能使其变成一个边双连通图。

解题思路:

边双连通分量缩点后计算度数为 \(1\) 的节点个数,假设有 \(cnt\) 个,则答案为 \((cnt+1)/2\)。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 5050, maxm = 20020;
struct Edge {
    int u, v, nxt;
} edge[maxm];
int n, m, head[maxn], ecnt;

void init() {
    memset(head, -1, sizeof(int)*(n+1));
    ecnt = 0;
}

void addedge(int u, int v) {
    edge[ecnt] = {u, v, head[u]}; head[u] = ecnt++;
    edge[ecnt] = {v, u, head[v]}; head[v] = ecnt++;
}

int dfn[maxn], low[maxn], id[maxn], ts, dcc;
bool vis[maxm];
stack<int> stk;

void tarjan(int u) {
    dfn[u] = low[u] = ++ts;
    stk.push(u);
    for (int i = head[u]; i != -1; i = edge[i].nxt) {
        if (vis[i]) continue;
        vis[i] = vis[i^1] = true;
        int v = edge[i].v;
        if (!dfn[v])
            tarjan(v), low[u] = min(low[u], low[v]);
        else
            low[u] = min(low[u], dfn[v]);
    }
    if (dfn[u] == low[u]) {
        dcc++;
        int v;
        do {
            v = stk.top();
            stk.pop();
            id[v] = dcc;
        } while (u != v);
    }
}

int d[maxn];

int main() {
    scanf("%d%d", &n, &m);
    init();
    for (int i = 0; i < m; i++) {
        int u, v;
        scanf("%d%d", &u, &v);
        addedge(u, v);
    }
    tarjan(1);
    for (int i = 0; i < 2*m; i += 2) {
        int u = edge[i].u, v = edge[i].v;
        if (id[u] != id[v])
            d[id[u]]++, d[id[v]]++;
    }
    int cnt = 0;
    for (int i = 1; i <= dcc; i++) if (d[i] == 1) cnt++;
    printf("%d\n", (cnt + 1) / 2);
    return 0;
}

标签:Paths,head,边双,int,题解,ecnt,edge,low,id
From: https://www.cnblogs.com/quanjun/p/17478756.html

相关文章

  • Educational Codeforces Round 150 (Rated for Div. 2) 题解
    https://codeforces.com/contest/1841https://codeforces.com/contest/1841/problemsD.PairsofSegmentshttps://codeforces.com/contest/1841/problem/D因为\(n\)只有\(2000\),所以考虑枚举每一对\((i,j)\)满足区间有交集并且\(i\neqj\)。如果有交集,就合并。然后......
  • base_path base_paths_win.cc
    //Copyright(c)2012TheChromiumAuthors.Allrightsreserved.//UseofthissourcecodeisgovernedbyaBSD-stylelicensethatcanbe//foundintheLICENSEfile.#ifndefBASE_BASE_PATHS_H_#defineBASE_BASE_PATHS_H_//Thisfiledeclarespathkey......
  • 题解 P9196【[JOI Open 2016] 销售基因链】
    套路题,来讲个套路解法。如果没有后缀的要求,答案就是trie树的子树内字符串数量。现在加上了后缀,尝试继续使用trie树解决问题。我们建立两棵trie树\(T_1,T_2\),其中\(T_1\)是正常的trie树,\(T_2\)是每个字符串翻转后的trie树。这样的话,包含给定后缀的字符串在\(T_2\)......
  • C++ Windows.h max宏与std::max冲突问题解决
    C语言引入的宏支持了一定程度的元编程,但它仅仅是简单的字符串替换,这种“六亲不认”的操作很容易导致一些编译错误。这篇文章介绍了一种场景:项目同时引入了老的C头文件,里面用宏定义了一些宏函数;还引入了C++的头文件,里面用其他方式定义了一些同名函数。具体到问题本身,这个......
  • Not Another Linear Algebra Problem 题解
    题意:自己看。首先我们知道我们唯一能找到的题解在hos_lyric的代码里。把它放在这里:(由bikuhiku提供)\[\begin{aligned}&U\subseteq\mathbb{F}_p^n,\text{subspace}\\&a(U):=\#\{p\in\text{Aut}(\mathbb{F}_p^n)|\text{Ker}(p-\text{id})=U\}\\&b(U):=......
  • 【问题解决1】fatal error: X11/XXXX.h: No such file or directory
    问题现象编译鸿蒙代码时,报如下类似的错误:错误1:错误2:解决方法step1:安装依赖文件sudoapt-getinstallapt-filesudoapt-fileupdatestep2:查找报错文件apt-filesearchXXXX.h例如:报错的是Intrinsic.h或上图中的Xrandr.h,对应如下:apt-filesearchIntrinsic......
  • vue调用百度api时,跨域问题解决方案
    最近在调用百度地图,文字转语音接口的时候,用vue,js来前端实现转换,及时语音播报,遇到点问题;1.之前直接不用accessToken,一个连接拼接抓取的,已经失效了。2.查看百度文档,更新后的接口,按照文档nodejs格式,一直都是报跨域问题,单独在headers中加'Access-Control-Allow-Origin':'*'无效。......
  • [ABC305C] Snuke the Cookie Picker题解
    题目大意有一个\(H\timesW\)的网格,一种有一个矩形,矩形中间有一个点被挖空,求这个点的坐标。(.表示空白,#表示矩形内的点)解析观察我们可以发现,每一矩形内的个点上下左右至少会有两个是#。如图:而每一个在矩形外的点上下左右最多只有一个#。所以我们只需要找的一个.的上......
  • [ABC305D] Sleep Log题解
    题目大意给\(N\)个时刻:当\(i\)为奇数时,\(A_i\)表示刚刚起床的时刻。当\(i\)为偶数时,\(A_i\)表示开始睡觉的时刻。有\(Q\)次询问,每次求在\([l,r]\)区间内睡了多长时间。分析首先我们要考虑处理边界情况。每一次二分查找第一个大于等于\(l\)和\(r\)的时刻......
  • VM虚拟机模板,克隆或导入后网络不通问题解决办法
    出于工作需要可能需要对VM虚拟机制作模板,并导出为.vof文件,并根据vof模板文件导入为新的虚拟机,但是当导入后会发现网络不通,现将网络问题解决办法进行记录:本次实验OS为Centos7,网卡默认配置文件名为ifcfg-ens331.保留默认网卡网卡目录:/etc/sysconfig/network-scripts/保留默认......