結果
問題 | No.2536 同値性と充足可能性 |
ユーザー |
![]() |
提出日時 | 2023-11-10 23:01:13 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 380 ms / 2,000 ms |
コード長 | 3,233 bytes |
コンパイル時間 | 2,365 ms |
コンパイル使用メモリ | 209,884 KB |
最終ジャッジ日時 | 2025-02-17 21:21:35 |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define rep(i, n) for (int i = 0; i < (n); i++)#define rep1(i, n) for (int i = 1; i <= (n); i++)#define rrep(i, n) for (int i = n - 1; i >= 0; i--)#define rrep1(i, n) for (int i = n; i >= 1; i--)#define all(x) x.begin(), x.end()#define rall(x) x.rbegin(), x.rend()#define eb emplace_back#define fi first#define se second#define sz(x) (int)(x).size()template <class T> using V = vector<T>;template <class T> using VV = V<V<T>>;typedef long long int ll;void speedUpIO() {cin.tie(nullptr);ios::sync_with_stdio(false);}template <class T> bool chmax(T &a, const T &b) {if (a < b) {a = b;return true;}return false;}template <class T> bool chmin(T &a, const T &b) {if (b < a) {a = b;return true;}return false;}/*--------------------------------------------------*/typedef pair<int, int> P;typedef pair<P, int> PP;const int INF = 1e9;const ll LINF = 1e18;const int MX = 100010;void solve() {int n, m;cin >> n >> m;VV<int> G(n);set<PP> st;rep(mi, m) {int i, j;string e;cin >> i >> e >> j;i--, j--;int ei = 0;if (e == "<==>") ei = 1;st.insert({{i, j}, ei});st.insert({{j, i}, ei});G[i].eb(j);G[j].eb(i);}V<int> col(n, -1);bool ans = true;auto dfs = [&](auto dfs, int u, V<int> &a) -> void {for (auto v : G[u]) {if (col[v] == -1) {if (st.count({{u, v}, 0})) {col[v] = 1 - col[u];} else if (st.count({{u, v}, 1})) {col[v] = col[u];} else {assert(false);}a.eb(v);dfs(dfs, v, a);} else {if (st.count({{u, v}, 0})) {if (col[u] == col[v]) {ans = false;return;}}if (st.count({{u, v}, 1})) {if (col[u] != col[v]) {ans = false;return;}}}}};V<int> b;rep(i, n) {if (col[i] == -1) {col[i] = 0;V<int> a = {i};dfs(dfs, i, a);if (!ans) break;int cnt = 0;for (auto v : a) {if (col[v] == 1) cnt++;}for (auto v : a) {int c = cnt >= (n + 1) / 2 ? 1 : 0;if (col[v] == c) b.eb(v);}}}if (!ans) {cout << "No\n";return;}cout << "Yes\n";cout << sz(b) << "\n";sort(all(b));for (auto v : b) {cout << v + 1;if (v != b.back()) cout << " ";}cout << "\n";}int main() {speedUpIO();int t = 1;// cin >> t;while (t--) {solve();// cout << solve() << "\n";// cout << (solve() ? "YES" : "NO") << "\n";// cout << fixed << setprecision(15) << solve() << "\n";}return 0;}