제출 #1275393

#제출 시각아이디문제언어결과실행 시간메모리
1275393tm.khoa.tmCats or Dogs (JOI18_catdog)C++20
0 / 100
1 ms568 KiB
//I love ManchesterUnited #include<bits/stdc++.h> using namespace std; #define love ManchesterUnited #define pb push_back #define FOR(i,a,b) for (int i=(a); i<=(b); i++) #define FORD(i,b,a) for (int i=(b); i>=(a); i--) #define REP(i, n) for(int i=0; i<(n); ++i) #define RED(i, n) for(int i=(n)-1; i>=0; --i) #define endl '\n' const int MAXN = 1005; int n; vector<int> adj[MAXN]; int pet[MAXN]; int dangerLevel() { vector<int> cats, dogs; FOR(i,1,n){ if (pet[i]==1) cats.pb(i); if (pet[i]==2) dogs.pb(i); } if (cats.empty() || dogs.empty()) return 0; int ans = 1e9; for (int c : cats){ queue<int> q; vector<int> dist(n+1,-1); q.push(c); dist[c]=0; while(!q.empty()){ int u = q.front(); q.pop(); if (pet[u]==2){ ans = min(ans, dist[u]); break; } for (int v: adj[u]){ if (dist[v]==-1){ dist[v]=dist[u]+1; q.push(v); } } } } if (ans==1e9) return 0; return ans; } void initialize(int N, vector<int> A, vector<int> B){ n = N; FOR(i,1,n){ adj[i].clear(); pet[i]=0; } for (int i = 0; i < N-1; i++){ int u = A[i], v = B[i]; adj[u].pb(v); adj[v].pb(u); } } int cat(int v){ pet[v] = 1; return dangerLevel(); } int dog(int v){ pet[v] = 2; return dangerLevel(); } int neighbor(int v){ pet[v] = 0; return dangerLevel(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...