乱写了一个贪心,怎么就过了?
#include<bits/stdc++.h>
using namespace std;
class Merge_Set{
public:
int s[100005];
void init(int sz){for(int i = 0;i <= sz;++i)s[i] = i;}
int find(int x){return s[x] == x?s[x]:s[x] = find(s[x]);}
void merge(int x,int y){s[x] = y;}
private:
}q;
struct node{
int x,y;
bool operator < (const node & hh)const{
return x==hh.x?y>hh.y:x<hh.x;
}
}a[2000005];
bool vis[2000005];
signed main(){
int n;
cin >> n;
for(int i = 1;i <= n;++i) {cin >> a[i].x >> a[i].y;if(a[i].x > a[i].y) swap(a[i].x,a[i].y);}
sort(a + 1,a + n + 1);
if(!(n & 1) || (n < 20 && a[i].y <= 5)){
for(int i = 1;i <= n;) {
swap(a[i].y,a[i + 1].y);
if(i & 1) i += 5;
else i += 2;
}
}
for(int i = 1;i <= n;++i){
if(!vis[a[i].x])vis[a[i].x] = 1;
else vis[a[i].y] = 1;
}
for(int i = 1;i <= n + 1;++i) if(!vis[i]) return cout << i - 1,0;
return 0;
}