给定一个连通无向图,求有多少条边仅被包含在一个简单环内并输出
\(n,\ m\leq10^5\)
tarjan
首先,一个连通块是一个环,当且仅当该连通块的 点数=边数
可以发现,如果两个环仅由一个公共点连接,那么这两个环互不影响,即点双两两互不影响。
所以我们可以考虑处理出点双和每个点双内的边数
但是求出点双后暴力dfs会被如下数据卡掉:
66667 99999
1 2
1 3
2 3
1 4
1 5
4 5
1 6
1 7
6 7
...
因为 \(1\) 节点每次枚举所有边的效率太低
于是可以在tarjan时将所有边压入栈中,再用set统计点双中的边数以及答案并去重
时间复杂度 \(O(n+m)\)
代码
#include <bits/stdc++.h>
using namespace std;
#define nc getchar()
const int maxn = 1e5 + 10;
int n, m, tot, top, h[maxn], dfn[maxn], low[maxn], st[maxn * 3];
struct edges {
int nxt, to;
} e[maxn << 1];
set <int> ans, edge[maxn], node[maxn];
inline int read() {
int x = 0; char c = nc;
while (c < 48) c = nc;
while (c > 47) x = x * 10 + c - 48, c = nc;
return x;
}
void addline(int u, int v) {
static int cnt = 1;
e[++cnt] = edges{h[u], v}, h[u] = cnt;
}
void tarjan(int u, int f) {
static int now;
dfn[u] = low[u] = ++now;
for (int i = h[u]; i; i = e[i].nxt) {
int v = e[i].to;
if (!dfn[v]) {
st[++top] = i >> 1, st[++top] = u, st[++top] = v;
tarjan(v, u);
low[u] = min(low[u], low[v]);
if (dfn[u] <= low[v]) {
tot++;
while (1) {
int t1, t2;
node[tot].insert(t1 = st[top--]);
node[tot].insert(t2 = st[top--]);
edge[tot].insert(st[top--]);
if (t1 == v && t2 == u) break;
}
}
} else if (dfn[v] < dfn[u] && v != f) {
st[++top] = i >> 1, st[++top] = u, st[++top] = v;
low[u] = min(low[u], dfn[v]);
}
}
}
int main() {
n = read(), m = read();
for (int i = 1; i <= m; i++) {
int u = read(), v = read();
addline(u, v), addline(v, u);
}
for (int i = 1; i <= n; i++) {
if (!dfn[i]) tarjan(i, 0);
}
for (int i = 1; i <= tot; i++) {
if (edge[i].size() == node[i].size()) {
ans.insert(edge[i].begin(), edge[i].end());
}
}
printf("%d\n", (int)ans.size());
for (int u : ans) printf("%d ", u);
return 0;
}
CF962F Simple Cycles Edges的更多相关文章
-
点双连通分量F. Simple Cycles Edges
F. Simple Cycles Edges time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
-
codeforces 962 F Simple Cycles Edges
求简单环,即求点=边数的点双分量,加上判断点和边的模板即可 (简单环模板,区分与点双缩点) ; ], edgecnt, dfn[maxm], low[maxm], bcc_cnt, bccnum[ma ...
-
Codeforces962F Simple Cycles Edges 【双连通分量】【dfs树】
题目大意: 给出一个无向图,问有哪些边只属于一个简单环. 题目分析: 如果这道题我们掌握了点双连通分量,那么结论会很显然,找到每个点双,如果一个n个点的点双正好由n条边构成,那么这些边都是可以的. 这 ...
-
Simple Cycles Edges CodeForces - 962F(点双连通分量)
题意: 求出简单环的所有边,简单环即为边在一个环内 解析: 求出点双连通分量,如果一个连通分量的点数和边数相等,则为一个简单环 点双连通分量 任意两个点都至少存在两条点不重复的路径 即任意两条边都 ...
-
Educational Codeforces Round 42 (Rated for Div. 2)F - Simple Cycles Edges
http://codeforces.com/contest/962/problem/F 求没有被两个及以上的简单环包含的边 解法:双联通求割顶,在bcc中看这是不是一个简单环,是的话把整个bcc的环加 ...
-
[CodeForces 11D] A Simple Task - 状态压缩入门
状态压缩/Bitmask 在动态规划问题中,我们会遇到需要记录一个节点是否被占用/是否到达过的情况.而对于一个节点数有多个甚至十几个的问题,开一个巨型的[0/1]数组显然不现实.于是就引入了状态压缩, ...
-
CodeForces - 11D A Simple Task
Discription Given a simple graph, output the number of simple cycles in it. A simple cycle is a cycl ...
-
Codeforces C. A Simple Task(状态压缩dp)
题目描述: A Simple Task time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
-
POJ 3895 Cycles of Lanes (dfs)
Description Each of the M lanes of the Park of Polytechnic University of Bucharest connects two of t ...
随机推荐
-
升级到win8.1右键响应慢
网上很多资料都是在显卡上做文章,试了N次确定不是这个问题. 后来查到这个好用了.以管理员身份运行 下面代码保存bat即可 regsvr32 /u /s igfxpph.dll reg delete H ...
-
数学(矩阵乘法):HDU 4565 So Easy!
So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
-
jQuery代码优化 事件委托篇
<转自 http://www.jb51.net/article/28770.htm> 参考文章: 解密jQuery事件核心 - 绑定设计(一) 参考文章: 解密jQuery事件核心 - ...
-
009.Working with SQL Server LocalDB --【在sql server localdb 上操作数据】
Working with SQL Server LocalDB 在sql server localdb 上操作数据 2017-3-7 2 分钟阅读时长 本文内容 1.SQL Server Expres ...
-
ubuntu命令安装
1.当make时,发现没有对应的命令: apt-get install build-essential 安装工具,可解决这个问题
-
Salesforce服务云简介
服务云简介 Salesforce的服务云(Service Cloud)是专注于客服和呼叫中心解决方案的子系统.它是Salesforce核心CRM系统的一部分. 服务云特性 服务云提供了客户服务和呼叫中 ...
-
选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由
选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由 我不喜欢用InstallRite的全自动安装包 ...
-
禁止用键盘左右箭头,去切换PageControl页签
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
-
远程服务器安装mysql数据库
https://www.cnblogs.com/renjidong/p/7047396.html 1.新开的云服务器,需要检测系统是否自带安装mysql # yum list installed | ...
-
HTML基础总纲
我看了很多博客感觉如果自己写的话还不一定有人家写的好,在介于我没有时间从这么细小的知识总结,那么人家总结好的我们为什么不用,完了之后在就自己的感受和不足之处在做补充. 我们一个的讲:主要参考: 一,H ...