中文题,最简单的并查集。午休时间怒 A 一发~
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; int fa[1005]; int n; int findfa(int x){ if(fa[x] != x){ fa[x] = findfa(fa[x]); } return fa[x]; } void add(int x, int y){ if(x > y) swap(x, y); x = findfa(x); y = findfa(y); if(x != y){ fa[y] = x; n--; } } int main(){ //freopen("a.txt", "r", stdin); int m; while(scanf("%d", &n) != EOF && n){ scanf("%d", &m); for(int i = 1; i <= n; i++) fa[i] = i; while(m--){ int x, y; scanf("%d %d", &x, &y); add(x, y); } printf("%dn", --n); } return 0; }