結果
問題 | No.2536 同値性と充足可能性 |
ユーザー |
![]() |
提出日時 | 2023-11-24 11:59:25 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 76 ms / 2,000 ms |
コード長 | 1,892 bytes |
コンパイル時間 | 2,260 ms |
コンパイル使用メモリ | 212,700 KB |
最終ジャッジ日時 | 2025-02-17 23:36:59 |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
ソースコード
#include <bits/stdc++.h>using namespace std;void fast_io() {ios::sync_with_stdio(false);std::cin.tie(nullptr);}int main() {fast_io();int n, m;cin >> n >> m;vector<vector<pair<int, int>>> g(n);for (int i = 0; i < m; i++) {int u, v;string e;cin >> u >> e >> v;u--;v--;if (e.size() == 5) {g[u].push_back({v, 1});g[v].push_back({u, 1});} else {g[u].push_back({v, 0});g[v].push_back({u, 0});}}vector<int> color(n, -1);vector<bool> vis(n, false);vector<int> ans;for (int i = 0; i < n; i++) {if (vis[i]) {continue;}vis[i] = true;queue<int> q;q.push(i);color[i] = 0;vector<vector<int>> verts(2);verts[0].push_back(i);while (!q.empty()) {int u = q.front();q.pop();for (auto [v, e] : g[u]) {if (color[v] == -1) {color[v] = color[u] ^ e;vis[v] = true;verts[color[v]].push_back(v);q.push(v);} else if (color[v] != color[u] ^ e) {cout << "No" << endl;return 0;}}}if (verts[0].size() < verts[1].size()) {swap(verts[0], verts[1]);}for (auto v : verts[0]) {ans.push_back(v);}}if (ans.size() >= (n + 1) / 2) {cout << "Yes" << endl;cout << ans.size() << endl;sort(ans.begin(), ans.end());for (int i = 0; i < ans.size(); i++) {cout << ans[i] + 1 << (i == ans.size() - 1 ? "\n" : " ");}cout << endl;} else {cout << "No" << endl;}}