Submission #142819

#TimeUsernameProblemLanguageResultExecution timeMemory
142819popovicirobertInformation (CEOI08_information)C++14
100 / 100
227 ms19676 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long /*const int MOD = 998244353; inline int lgput(int a, int b) { int ans = 1; while(b > 0) { if(b & 1) ans = (1LL * ans * a) % MOD; b >>= 1; a = (1LL * a * a) % MOD; } return ans; } inline void mod(int &x) { if(x >= MOD) x -= MOD; } inline void add(int &x, int y) { x += y; mod(x); } inline void sub(int &x, int y) { x += MOD - y; mod(x); } inline void mul(int &x, int y) { x = (1LL * x * y) % MOD; } inline int inv(int x) { return lgput(x, MOD - 2); }*/ /*int fact[], invfact[]; inline void prec(int n) { fact[0] = 1; for(int i = 1; i <= n; i++) { fact[i] = (1LL * fact[i - 1] * i) % MOD; } invfact[n] = lgput(fact[n], MOD - 2); for(int i = n - 1; i >= 0; i--) { invfact[i] = (1LL * invfact[i + 1] * (i + 1)) % MOD; } } inline int comb(int n, int k) { if(n < k) return 0; return (1LL * fact[n] * (1LL * invfact[k] * invfact[n - k] % MOD)) % MOD; }*/ using namespace std; const int MAXN = 2000; const int MAXM = (int) 1e6; vector < pair <short, int> > g[MAXN + 1], up[MAXN + 1]; int idl[MAXN + 1], idr[MAXN + 1], sz; char vis[MAXN + 1], sol[MAXM + 1]; void dfs(int nod) { idl[nod] = ++sz; vis[nod] = 1; for(auto it : g[nod]) { if(vis[it.first] == 0) { dfs(it.first); sol[it.second] = 1; } } idr[nod] = sz; } void dfs1(int nod) { vis[nod] = 1; for(auto it : g[nod]) { if(vis[it.first]) continue; if(sol[it.second] == 0) { sol[it.second] = 2; dfs1(it.first); } else if(up[it.first].size()) { sol[it.second] = 2, sol[up[it.first].back().second] = 1; up[it.first].pop_back(); dfs1(it.first); } } } int main() { #ifdef HOME ifstream cin("A.in"); ofstream cout("A.out"); #endif int n, m, i; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n >> m; for(i = 1; i <= m; i++) { int x, y; cin >> x >> y; g[x].push_back({y, i}); } dfs(1); for(i = 1; i <= n; i++) { for(auto it : g[i]) { if(idl[i] <= idl[it.first] && idr[it.first] <= idr[i] && sol[it.second] == 0) { up[it.first].push_back({i, it.second}); } } } fill(vis, vis + n + 1, 0); dfs1(1); vector <int> a, b; for(i = 1; i <= m; i++) { if(sol[i] == 1) a.push_back(i); if(sol[i] == 2) b.push_back(i); } if(a.size() < n - 1 || b.size() < n - 1) { cout << "NONE"; return 0; } for(auto it : a) { cout << it << " "; } cout << "\n"; for(auto it : b) { cout << it << " "; } return 0; }

Compilation message (stderr)

information.cpp: In function 'int main()':
information.cpp:130:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(a.size() < n - 1 || b.size() < n - 1) {
        ~~~~~~~~~^~~~~~~
information.cpp:130:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(a.size() < n - 1 || b.size() < n - 1) {
                            ~~~~~~~~~^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...