結果
問題 | No.2900 Star Divine |
ユーザー | 👑 獅子座じゃない人 |
提出日時 | 2024-08-24 14:12:17 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,262 bytes |
コンパイル時間 | 1,276 ms |
コンパイル使用メモリ | 107,388 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-20 00:28:07 |
合計ジャッジ時間 | 2,858 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 4 ms
5,248 KB |
testcase_01 | AC | 57 ms
5,376 KB |
testcase_02 | AC | 58 ms
5,376 KB |
testcase_03 | AC | 67 ms
5,376 KB |
testcase_04 | AC | 102 ms
5,376 KB |
testcase_05 | AC | 71 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 101 ms
5,376 KB |
testcase_08 | WA | - |
testcase_09 | WA | - |
ソースコード
#include <algorithm> #include <iostream> #include <utility> #include <vector> using namespace std; void solve() { int x,y,m; cin >> x >> y >> m; vector<pair<int, int>> uv(m); for(int i=0;i<m;++i){ cin >> uv[i].first >> uv[i].second; --uv[i].first; --uv[i].second; } sort(uv.begin(), uv.end()); uv.erase(unique(uv.begin(), uv.end()), uv.end()); if(x<=y){ cout << 0 << " " << y << endl << endl; for(int i=0;i<y;++i){ cout << i+1 << " "; } cout << endl; return; } int m_=uv.size(); vector<int> u(m_); vector<int> v(m_); vector<int> b_deg(x); vector<int> r_deg(y); for(int i=0;i<m_;++i){ u[i]=uv[i].first; v[i]=uv[i].second; ++b_deg[u[i]]; ++r_deg[v[i]]; } int odd_stars=0; for(int i=0;i<x;++i){ if(b_deg[i]%2>0){ ++odd_stars; } } if((odd_stars+y)*2>=x+y){ cout << odd_stars << " " << y << endl; for(int i=0;i<x;++i){ if(b_deg[i]%2>0){ cout << i+1 << " "; } } cout << endl; for(int i=0;i<y;++i){ cout << i+1 << " "; } cout << endl; return; } vector<int> adj_even_stars(y); for(int i=0;i<m_;++i){ if(b_deg[u[i]]%2==0){ ++adj_even_stars[v[i]]; } } int removed_star=0; for(int i=1;i<y;++i){ if(adj_even_stars[i]*2-r_deg[i]>adj_even_stars[removed_star]*2-r_deg[removed_star]){ removed_star=i; } } for(int i=0;i<m_;++i){ if(v[i]==removed_star){ if(b_deg[u[i]]%2>0){ --odd_stars; } else { ++odd_stars; } --b_deg[u[i]]; } } cout << odd_stars << " " << y-1 << endl; for(int i=0;i<x;++i){ if(b_deg[i]%2>0){ cout << i+1 << " "; } } cout << endl; for(int i=0;i<y;++i){ if(i!=removed_star){ cout << i+1 << " "; } } cout << endl; } int main(void) { int t; cin >> t; while(t--){ solve(); if(t>0){ cout << endl; } } return 0; }