30 分求助
查看原帖
30 分求助
448887
cancan123456楼主2023/1/16 16:32
#include <cstdio>
using namespace std;
const int W = 10005;
const int N = 1000005;
struct Edge {
	int v, next;
} edge[2 * N];
int head[W];
int cnt;
void add_edge(int u, int v) {
	cnt++;
	edge[cnt].v = v;
	edge[cnt].next = head[u];
	head[u] = cnt;
}
bool vis[N], del[N];
int v, e, maxv;
int max(int a, int b) {
	return a > b ? a : b;
}
void dfs(int u) {
	if (vis[u]) {
		return;
	}
	maxv = max(maxv, u);
	vis[u] = true;
	v++;
	for (int i = head[u]; i != 0; i = edge[i].next) {
		e++;
		dfs(edge[i].v);
	}
}
int main() {
	int n;
	scanf("%d", &n);
	for (int a, b, i = 1; i <= n; i++) {
		scanf("%d %d", &a, &b);
		add_edge(a, b);
		add_edge(b, a);
	}
	for (int i = 1; i <= 10; i++) {
		if (!vis[i]) {
			v = e = maxv = 0;
			dfs(i);
			e /= 2;
			if (v == e + 1) {
				del[maxv] = true;
			}
		}
		if (vis[i] && del[i]) {
			printf("%d", i - 1);
			return 0;
		}
	}
	printf("10000");
	return 0;
}
2023/1/16 16:32
加载中...