[CF962F]Simple Cycles Edges

Simple Cycles Edges

题解

很容易发现,一个简单环中不可能包含其它的边,即它的边数与点数必定相等,所以所有点双连通分量中边数与点数不等的必须舍去。因为如果其中间含有其它边,必定可以被分解成更多的简单环,其的边必定不可能符合条件。

如果利用边双连通的话,可能会被两个环交与一个点的情况卡掉,别问笔者是怎么知道的,而边双连通一定能被点双连通实现,所以改为求点双连通分量就可以得出打哪了。

由于要输出边的编号,可以利用set来实现统计与去重。

源码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100005
typedef long long LL;
typedef unsigned long long uLL;
const LL mo=1e9+7;
typedef pair<int,int> pii;
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){
	_T f=1;x=0;char s=getchar();
	while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}
	while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);
posted @ 2020-08-20 20:37  StaroForgin  阅读(8)  评论(0)    收藏  举报  来源