样例输入1:
2
1 2
输出1:
0
样例输入2:
7
1 2
2 3
3 1
4 5
5 6
6 7
输出2:
1
3 1 3 7
分析:并查集
code:
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
const int N = 1e5 + 100;
const int INF = 0x3f3f3f3f;
int fa[N];
int get_fa(int x) {
if (fa[x] == x) return x;
return fa[x] = get_fa(fa[x]);
}
pair<int, int> a[N];
int cnt = 0;
void me(int x, int y) {
int xx = get_fa(x);
int yy = get_fa(y);
if (xx != yy)
fa[xx] = yy;
else {
a[cnt].first = x;
a[cnt++].second = y;
}
}
int main(int argc, char const *argv[]) {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
fa[i] = i;
}
for (int i = 1; i < n; i++) {
int x, y;
cin >> x >> y;
me(x, y);
}
set<int> se;
for (int i = 1; i <= n; i++) {
int x = get_fa(i);
se.insert(x);
}
cout << se.size() - 1 << endl;
if (se.size() > 1) {
set<int>::iterator it = se.begin();
set<int>::iterator itt = se.begin();
*itt++;
for (int i = 0; i < cnt; i++) {
cout << a[i].first << " " << a[i].second << " ";
cout << *it << " " << *itt++ << endl;
}
}
return 0;
}