Submission #468805

#TimeUsernameProblemLanguageResultExecution timeMemory
468805stefantagaCats or Dogs (JOI18_catdog)C++14
38 / 100
3055 ms10084 KiB
#include "catdog.h" #include <bits/stdc++.h> #include <cstdio> #include <cassert> #include <vector> #include <stdlib.h> #define INF 100000005 using namespace std; int x,cats[200005],dogs[200005],tata[200005],niv[200005],nr,valoare[200005]; vector <int> gr[200005]; void dfs(int x,int t,int nivel) { tata[x]=t; niv[x]=nivel; for (int i=0; i<gr[x].size(); i++) { int nod=gr[x][i]; if (nod!=t) { dfs(nod,x,nivel+1); } } } int n2; void initialize(int n, std::vector<int> A, std::vector<int> B) { n2=n; int i; for (i=0; i<n-1; i++) { gr[A[i]].push_back(B[i]); gr[B[i]].push_back(A[i]); } for (i=1; i<=n; i++) { cats[i]=0; dogs[i]=0; } nr=0; dfs(1,0,1); } void solve(int x,int t) { for (int i=0;i<gr[x].size();i++) { int nod=gr[x][i]; if (nod!=t) { solve(nod,x); } } if (valoare[x]==1) { dogs[x]=INF; } else if (valoare[x]==2) { cats[x]=INF; } int i; for (i=0;i<gr[x].size();i++) { int nod=gr[x][i]; if (nod!=t) { dogs[x]+=min(dogs[nod],cats[nod]+1); cats[x]+=min(cats[nod],dogs[nod]+1); } } } int calculeaza() { int i; for (i=1;i<=n2;i++) { cats[i]=dogs[i]=0; } solve(1,0); if (valoare[1]==1) { return cats[1]; } if (valoare[1]==2) { return dogs[1]; } return min(dogs[1],cats[1]); } int cat(int v) { valoare[v]=1; return calculeaza(); } int dog(int v) { valoare[v]=2; return calculeaza(); } int neighbor(int v) { valoare[v]=0; return calculeaza(); } /*int readInt(){ int i; if(scanf("%d",&i)!=1){ fprintf(stderr,"Error while reading input\n"); exit(1); } return i; } int main(){ int N=readInt(); std::vector<int> A(N-1),B(N-1); for(int i=0;i<N-1;i++) { A[i]=readInt(); B[i]=readInt(); } int Q; assert(scanf("%d",&Q)==1); std::vector <int> T(Q),V(Q); for(int i=0;i<Q;i++) { T[i]=readInt(); V[i]=readInt(); } initialize(N,A,B); std::vector<int> res(Q); for(int j=0;j<Q;j++) { if(T[j]==1) res[j]=cat(V[j]); else if(T[j]==2) res[j]=dog(V[j]); else res[j]=neighbor(V[j]); } for(int j=0;j<Q;j++) printf("%d\n",res[j]); return 0; }*/

Compilation message (stderr)

catdog.cpp: In function 'void dfs(int, int, int)':
catdog.cpp:16:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for (int i=0; i<gr[x].size(); i++)
      |                   ~^~~~~~~~~~~~~
catdog.cpp: In function 'void solve(int, int)':
catdog.cpp:45:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |     for (int i=0;i<gr[x].size();i++)
      |                  ~^~~~~~~~~~~~~
catdog.cpp:63:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |     for (i=0;i<gr[x].size();i++)
      |              ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...