#include<bits/stdc++.h> usingnamespace std; vector<int> edges[222222]; bool vis[222222]; int deg[222222]; intmain() { int n, m; cin >> n >> m; if (m != n) { cout << "No"; return0; } for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; edges[a].push_back(b); edges[b].push_back(a); deg[a]++; deg[b]++; } for (int i = 1; i <= n; i++) { if (deg[i] != 2) { cout << "No"; return0; } } queue<int> q; q.push(1); vis[1] = 1; int cnt = 0; while (!q.empty()) { int x = q.front(); q.pop(); cnt++; for (int i = 0; i < edges[x].size(); i++) { int nex = edges[x][i]; if (!vis[nex]) { vis[nex] = 1; q.push(nex); } } } cout << (cnt == n ? "Yes" : "No"); return0; }
#include<bits/stdc++.h> usingnamespace std; #define int long long signedmain() { int n, m; cin >> n >> m; vector<int> c(n); for (int i = 0; i < n; i++) { cin >> c[i]; } vector<vector<int>> a(m); for (int i = 0; i < m; i++) { int x; cin >> x; a[i].resize(x); for (int j = 0; j < x; j++) { cin >> a[i][j]; a[i][j] -= 1; } } int ans = 1e18; int maxx = 1; for (int i = 0; i < n; i++) { maxx *= 3; } for (int i = 0; i < maxx; i++) { vector<int> tp(n, 0); int now = i; int cnt = 0;
for (int j = 0; j < n; j++) { int ttp = now % 3; now /= 3; tp[j] = ttp; cnt += ttp * c[j]; } if (cnt >= ans) { continue; } bool flag = true; for (int j = 0; j < m; j++) { int cnt = 0; for (int nex : a[j]) { cnt += tp[nex]; if (cnt >= 2) { break; } } if (cnt < 2) { flag = false; break; } } if (flag) { ans = cnt; } } cout << ans; return0; }