結果
問題 | No.2536 同値性と充足可能性 |
ユーザー |
![]() |
提出日時 | 2023-11-11 10:00:07 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 115 ms / 2,000 ms |
コード長 | 2,949 bytes |
コンパイル時間 | 3,955 ms |
コンパイル使用メモリ | 243,120 KB |
実行使用メモリ | 17,796 KB |
最終ジャッジ日時 | 2024-09-26 02:41:45 |
合計ジャッジ時間 | 6,491 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
コンパイルメッセージ
main.cpp: In function 'int main()': main.cpp:45:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17' [-Wc++17-extensions] 45 | for(auto [d,f] : e){ | ^
ソースコード
#include <bits/stdc++.h>using namespace std;#include <atcoder/all>using namespace atcoder;#define rep(i, n) for(int i=0;i<(n);++i)#define rep1(i, n) for(int i=1;i<=(n);i++)#define ll long longusing mint = modint998244353;using P = pair<ll,ll>;using lb = long double;using T = tuple<ll, ll, ll>;#ifdef LOCAL# include <debug_print.hpp># define dbg(...) debug_print::multi_print(#__VA_ARGS__, __VA_ARGS__)#else# define dbg(...) (static_cast<void>(0))#endifint main(){int n, m;cin >> n >> m;dsu uf(n);vector<vector<int>> g(n);vector<pair<int,int>> e;rep(i,m){int a, b;string s;cin >> a >> s >> b;--a;--b;if(s=="<==>"){uf.merge(a,b);}else{e.emplace_back(a,b);}}vector<vector<int>> gr(n);auto res = uf.groups();for(auto vs : res){for(int v : vs){gr[uf.leader(v)].push_back(v);}}for(auto [d,f] : e){if(uf.same(d,f)){cout << "No" << endl;return 0;}g[uf.leader(d)].push_back(uf.leader(f));g[uf.leader(f)].push_back(uf.leader(d));}//二部グラフ判定vector<int> color(n, -1);auto dfs = [&](auto dfs, int u, int c) -> bool {color[u] = c;for(int v : g[u]){if(color[v] == c) return false;if(color[v]==-1 && !dfs(dfs,v, c^1)) return false;}return true;};vector<bool> vis(n);vector<vector<int>> cnt(2);auto dfs2 = [&](auto dfs2, int u) -> void {vis[u] = true;cnt[color[u]].push_back(u);for(int v : g[u]){if(!vis[v]) dfs2(dfs2,v);}};int ans = 0;vector<int> t(n);rep(i,n){if(color[i]==-1 && uf.leader(i)==i){if(!dfs(dfs,i,0)){cout<< "No" << endl;return 0;}cnt = vector<vector<int>>(2);dfs2(dfs2,i);int sum0 = 0;int sum1 = 0;for(int c : cnt[0]) sum0 += gr[c].size();for(int c : cnt[1]) sum1 += gr[c].size();dbg(sum0, sum1);if(sum0>=sum1) {for(int c : cnt[0]) {t[c] = 1;}ans += sum0;}else{for(int c : cnt[1]) t[c] = 1;ans += sum1;}}}if(ans>=(n+1)/2){cout << "Yes" << endl;vector<int> r;rep(i,n){if(t[i]) for(int v : gr[i]) r.push_back(v+1);}sort(r.begin(),r.end());cout << r.size() << endl;rep(i,r.size()){cout << r[i];if(i!=r.size()-1){cout << " ";}}cout << endl;return 0;}cout << "No" << endl;return 0;}