Submission #29556

#TimeUsernameProblemLanguageResultExecution timeMemory
29556khsoo01Untitled (POI11_kon)C++11
100 / 100
2489 ms81428 KiB
#include<bits/stdc++.h> #define rf(x) {(x)=0;while(*pp<48)pp++;while(47<*pp)(x)=((x)<<3)+((x)<<1)+(*pp++&15);} using namespace std; const int N = 5005; static unsigned char str[55555555], *pp = str; int n, ms, cc, wh[2*N], cnt[N], ans = 1; bool vis[2*N], adj[N][N], sol[N]; vector<int> st, mem[2]; void dfs (int I, int B) { int X = B * n + I; if(vis[X]) return; vis[X] = true; for(int i=1;i<=n;i++) { if(I != i && adj[I][i] != B) dfs(i, B^1); } st.push_back(X); } void rdfs (int I, int B) { int X = B * n + I; if(vis[X]) return; vis[X] = true; wh[X] = cc; for(int i=1;i<=n;i++) { if(I != i && adj[I][i] == B) rdfs(i, B^1); } } int main() { scanf("%d",&n); for(int i=1;i<2*n/3;i++) { int M, T; scanf("%d",&M); ms += M; for(int j=0;j<M;j++) { scanf("%d",&T); adj[i][T] = 1; } } fflush(stdin); fread(str, 1, 55555555, stdin); for(int i=2*n/3;i<=n;i++) { int M, T; rf(M); ms += M; for(int j=0;j<M;j++) { rf(T); adj[i][T] = 1; } } if(ms == 0 || ms == n*(n-1)) { printf("%d\n",n); return 0; } for(int i=1;i<=n;i++) { dfs(i, 0); dfs(i, 1); } fill(vis+1, vis+1+2*n, 0); for(int i=st.size();i--;) { int T = st[i]; if(vis[T]) continue; cc++; T > n ? rdfs(T-n, 1) : rdfs(T, 0); } for(int i=1;i<=n;i++) { if(wh[i] == wh[i+n]) {puts("0"); return 0;} sol[i] = (wh[i] < wh[i+n]); mem[sol[i]].push_back(i); } for(int i=1;i<=n;i++) { int B = sol[i]^1; for(auto &T : mem[B]) { if(adj[i][T] == B) cnt[i]++; } if(cnt[i] == mem[B].size()) ans++; } for(auto &A : mem[0]) for(auto &B : mem[1]) { if(cnt[A] + cnt[B] == n-1) ans++; } printf("%d\n",ans); }

Compilation message (stderr)

kon.cpp: In function 'int main()':
kon.cpp:78:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(cnt[i] == mem[B].size()) ans++;
             ^
kon.cpp:34:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
                ^
kon.cpp:37:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&M);
                 ^
kon.cpp:40:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d",&T);
                  ^
kon.cpp:45:32: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  fread(str, 1, 55555555, stdin);
                                ^
#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...