P1763 friendly group

发布时间 2023-05-23 15:08:26作者: 刘海烽
/*
 * @Description: To iterate is human, to recurse divine.
 * @Autor: Recursion
 * @Date: 2022-05-16 22:59:39
 * @LastEditTime: 2022-05-16 23:27:17
 */
#include <bits/stdc++.h>
#define LL long long 
using namespace std;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 1e9 + 10;
const int N = 1e6;
int T,n,m,ans;
int f[N];
int a[N];
int b[N];
 
int find(int x){
    if(f[x] == x)
        return x;
    return f[x] = find(f[x]);
}
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> T;
    int num = 0;
    while(T--){
        ans = 0;
        num ++;
        cin >> n >> m;
        for(int i = 1;i <= n;i ++){
            f[i] = i;
            a[i] = 0;//
            b[i] = 1;//
        }
        while(m -- ){
            int x,y;
            cin >> x >> y;
            int u = find(x);
            int v = find(y);
            if(u == v){
                a[v]++;
            }
            else{
                f[u] = v;
                a[v] += a[u] + 1;
                b[v] += b[u];
            }
        }
        for(int i = 1;i <= n;i ++){
                if(i == f[i]&&(a[i] - b[i] >= 0)){
                    ans += a[i] - b[i];
                }
            }
        cout << "Case #" << num << ": " << ans << endl;
    }
 
 
    return 0;
}