結果
問題 | No.382 シャイな人たち (2) |
ユーザー |
![]() |
提出日時 | 2020-11-02 18:27:12 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,611 bytes |
コンパイル時間 | 2,337 ms |
コンパイル使用メモリ | 203,888 KB |
最終ジャッジ日時 | 2025-01-15 19:06:30 |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 20 WA * 1 |
ソースコード
#include<bits/stdc++.h> template<class T,class U> inline bool chmin(T&x,U y){if(x>y){x=y;return true;}return false;} template<class T,class U> inline bool chmax(T&x,U y){if(x<y){x=y;return true;}return false;} void rec_MIS(int n, std::vector<std::vector<int>>&e, std::vector<bool>&vis, std::vector<int>&d, std::vector<int>&tmp, std::vector<int>&ans){ int D{}, idx{-1}; for(int i{};i<n;++i){ if(vis[i]) continue; if(d[i] == 0){ vis[i]=true; tmp.push_back(i); rec_MIS(n, e, vis, d, tmp, ans); tmp.pop_back(); vis[i]=false; return; } if(d[i] == 1){ vis[i]=true; for(auto&j:e[i]) if(!vis[j]){ vis[j]=true; for(auto&k:e[j]) --d[k]; tmp.push_back(i); rec_MIS(n, e, vis, d, tmp, ans); tmp.pop_back(); for(auto&k:e[j]) ++d[k]; vis[j]=false; break; } vis[i]=false; return; } if(D < d[i]){ D = d[i]; idx = i; } } if(idx==-1){ if(ans.size() < tmp.size()) ans = tmp; return; } vis[idx] = true; std::vector<int> idxs; idxs.reserve(D); for(auto&j:e[idx]) if(!vis[j]){ idxs.push_back(j); vis[j]=true; for(auto&k:e[j]) --d[k]; } tmp.push_back(idx); rec_MIS(n, e, vis, d, tmp, ans); tmp.pop_back(); for(auto&j:idxs){ vis[j]=false; for(auto&k:e[j]) ++d[k]; if(D>2) --d[j]; } if(D>2){ rec_MIS(n, e, vis, d, tmp, ans); for(auto&j:idxs) ++d[j]; } vis[idx] = false; } std::vector<int> MIS(std::vector<std::vector<int>>&e){ int n = e.size(); std::vector<bool> vis(n); std::vector<int> d; d.reserve(n); for(auto&v:e) d.push_back(v.size()); std::vector<int> tmp,ans; rec_MIS(n, e, vis, d, tmp, ans); return ans; } int main(){ int64_t s; constexpr int64_t base = 12345, mod = 1000003; std::cin>>s; (s*=base) %= mod; int n = s%120 + 2; (s*=base) %= mod; int p = s; std::vector<std::vector<int>> e(n); for(int i{};i<(n);++i){ for(int j{i+1};j<n;++j){ (s*=base) %= mod; if(s>=p){ e[i].push_back(j); e[j].push_back(i); } } } auto v=MIS(e); n = v.size(); std::cout<<n+1<<'\n'; for(int i{};i<(n-1);++i){ std::cout<<v[i]+1<<" "; } std::cout<<v.back()+1<<'\n'; }