제출 #477538

#제출 시각아이디문제언어결과실행 시간메모리
477538nicolaalexandraCats or Dogs (JOI18_catdog)C++14
38 / 100
3072 ms6852 KiB
#include <bits/stdc++.h> #include "catdog.h" #define DIM 100010 #define INF 2000000000 using namespace std; vector <int> L[DIM],a,b; int v[DIM],dp[DIM][3]; int n,i,q,tip,x; void initialize(int _n, vector<int> A, vector<int> B) { n = _n; for (int i=0;i<n-1;i++){ L[A[i]].push_back(B[i]); L[B[i]].push_back(A[i]); } } void dfs (int nod, int tata){ for (auto vecin : L[nod]) if (vecin != tata) dfs (vecin,nod); if (!v[nod]) dp[nod][1] = dp[nod][2] = 0; else { if (v[nod] == 1) dp[nod][1] = 0, dp[nod][2] = INF; else dp[nod][1] = INF, dp[nod][2] = 0; } for (auto vecin : L[nod]){ if (vecin == tata) continue; dp[nod][1] += min (dp[vecin][1],dp[vecin][2]+1); dp[nod][2] += min (dp[vecin][2],dp[vecin][1]+1); } } int cat(int x) { v[x] = 1; memset (dp,0,sizeof dp); dfs (1,0); return min(dp[1][1],dp[1][2]); } int dog(int x) { v[x] = 2; memset (dp,0,sizeof dp); dfs (1,0); return min(dp[1][1],dp[1][2]); } int neighbor(int x) { v[x] = 0; memset (dp,0,sizeof dp); dfs (1,0); return min(dp[1][1],dp[1][2]); } /* int main (){ ifstream cin ("date.in"); ofstream cout ("date.out"); cin>>n; for (i=0;i<n-1;i++){ int x,y; cin>>x>>y; a.push_back(x); b.push_back(y); //cin>>a[i]>>b[i]; } initialize(n,a,b); cin>>q; for (;q--;){ cin>>tip>>x; if (tip == 1) cout<<cat(x)<<"\n"; else { if (tip == 2) cout<<dog(x)<<"\n"; else cout<<neighbor(x)<<"\n"; } } return 0; } */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...