0w1

CFR 129 B. Students and Shoelaces ( DFS )

Problem - B - Codeforces
把度數和邊的變量維護好就很簡單。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100 + 2;
const int MAXM = MAXN * MAXN / 2;

int n, m;
vector< int > G[ MAXN ];
int deg[ MAXN ], d_deg[ MAXN ];

void solve(){
    int cnt = 0;
    while( m ){
        int c = 0;
        for( int u = 1; u <= n; ++u )
            if( deg[ u ] == 1 ){
                for( int v : G[ u ] )
                    if( deg[ v ] )
                        ++d_deg[ v ], --deg[ u ],
                        --m;
                ++c;
            }
        if( c == 0 ) break;
        ++cnt;
        for( int u = 1; u <= n; ++u )
            deg[ u ] -= d_deg[ u ],
            d_deg[ u ] = 0;
    }
    printf("%d\n", cnt);
}

int main(){
    scanf("%d%d", &n, &m);
    for( int i = 0; i < m; ++i ){
        int u, v; scanf("%d%d", &u, &v);
        G[ u ].push_back( v );
        G[ v ].push_back( u );
        ++deg[ u ];
        ++deg[ v ];
    }
    solve();
    return 0;
}