Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // NgJaBach: Forever Meadow <3
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- typedef unsigned long long ull;
- #define pb push_back
- #define pob pop_back
- #define mp make_pair
- #define upb upper_bound
- #define lwb lower_bound
- #define bend(a) a.begin(),a.end()
- #define rev(x) reverse(bend(x))
- #define mset(a) memset(a, 0, sizeof(a))
- #define fi first
- #define se second
- #define gcd __gcd
- #define getl(s) getline(cin, s);
- #define setpre(x) fixed << setprecision(x)
- #define endl '\n'
- const int N=200050,M=1000000007;
- const ll INF=1e18+7;
- int cnt=0,dis[N],low[N];
- vector<int>gay[N];
- vector<pair<int,int> >bridges;
- void dfs(int u,int p){
- low[u]=dis[u]=cnt++;
- for(auto v:gay[u]){
- if(v!=p){
- if(dis[v]!=-1){
- low[u]=min(low[u],dis[v]);
- }
- else{
- dfs(v,u);
- low[u]=min(low[u],low[v]);
- if(dis[v]<=low[v]){
- bridges.pb({min(u,v),max(u,v)});
- }
- }
- }
- }
- return;
- }
- int main(){
- ios_base::sync_with_stdio(NULL); cin.tie(nullptr); cout.tie(nullptr);
- // freopen(".inp","r",stdin);
- // freopen(".out","w",stdout);
- int n,m,x,y;
- cin>>n>>m;
- while(m--){
- cin>>x>>y;
- gay[x].pb(y);
- gay[y].pb(x);
- }
- for(int i=1;i<=n;++i) dis[i]=-1;
- for(int i=1;i<=n;++i){
- if(dis[i]==-1) dfs(i,i);
- }
- n=bridges.size();
- sort(bend(bridges));
- cout<<n<<endl;
- for(int i=0;i<n;++i) cout<<bridges[i].fi<<" "<<bridges[i].se<<endl;
- return 0;
- }
- /*
- ==================================+
- INPUT: |
- ------------------------------ |
- ------------------------------ |
- ==================================+
- OUTPUT: |
- ------------------------------ |
- ------------------------------ |
- ==================================+
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement