Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
26707 | gaochunzhen | 【BJ】T3 | C++ | 运行出错 | 52 | 2009 MS | 416 KB | 1599 | 2024-02-23 14:45:50 |
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 109; int n, m, deg[N], g[N][N], T1[N][N], T2[N][N]; int getfa(int u) { for (int i = 1; i <= n; i++) if (T1[u][i]) return i; return 0; } int lim, ok, cnt; void del(int u, int v) { if (T1[u][v] && T2[u][v]) cnt--; T1[u][v] = T1[v][u] = 0; deg[u]--, deg[v]--; } void add(int u, int v) { if (!T1[u][v] && T2[u][v]) cnt++; T1[u][v] = T1[v][u] = 1; deg[u]++, deg[v]++; } pair<int, int> way[1000009]; void dfs(int d) { if (ok) return; if (cnt == n - 1) { printf("Yes\n%d\n", d); for (int i = 1; i <= d; i++) printf("%d %d\n", way[i].first, way[i].second); ok = 1; return; } if (d == lim) return; for (int u = 1; u <= n; u++) { if (deg[u] > 1) continue; int fa = getfa(u); for (int v = 1; v <= n; v++) { if (!g[u][v] || T1[u][v]) continue; del(fa, u), add(u, v), way[d + 1] = make_pair(u, v); dfs(d + 1); add(fa, u), del(u, v); } } } int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= m; i++) { int u, v, f1, f2; scanf("%d%d%d%d", &u, &v, &f1, &f2); g[u][v] = g[v][u] = 1; if (f1) T1[u][v] = T1[v][u] = 1, deg[u]++, deg[v]++; if (f2) T2[u][v] = T2[v][u] = 1; if (f1 && f2) cnt++; } assert(n <= 9); while (!ok) { dfs(0); lim++; } if (!ok) printf("No\n"); fclose(stdin); fclose(stdout); return 0; }