# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
202354 | CaroLinda | Bosses (BOI16_bosses) | C++14 | 1122 ms | 888 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
const int MAXN = 5e3 + 10 ;
const int inf = 2e9+10 ;
using namespace std ;
int N , K , my_boss ;
long long ans = inf , cur_ans ;
int deg[MAXN] , par[MAXN] ;
long long val[MAXN] ;
vector<int> adj[MAXN];
bool vis[MAXN] ;
inline void bfs(int S)
{
memset(vis, false, sizeof vis ) ;
for(int i = 1 ; i <= N ; i++ ) val[i] = 0 ;
queue<int> fila ;
vector<int> ordem ;
fila.push(S) ;
par[S] = -1 ;
vis[S] = true ;
ordem.push_back(S) ;
while(!fila.empty() )
{
int curr = fila.front() ;
fila.pop() ;
for(int viz : adj[curr] )
{
if( vis[viz] ) continue ;
vis[viz] = true ;
fila.push(viz) ;
par[viz] = curr ;
ordem.push_back( viz ) ;
}
}
for(int i = 1 ; i <= N ; i++ )
if(!vis[i]) return ;
reverse(ordem.begin() ,ordem.end() ) ;
for(int i : ordem )
{
val[i] += 1LL ;
if( par[i] != -1 )
val[ par[i] ] += val[i] ;
}
cur_ans = 0LL ;
for(int i = 1 ; i <= N ; i++ )
cur_ans += val[i] ;
ans = min(ans,cur_ans ) ;
}
int main()
{
scanf("%d", &N ) ;
for(int i = 1 ; i <= N ; i++ )
{
scanf("%d", &K ) ;
for(int j = 0 ; j < K ; j++ )
{
scanf("%d", &my_boss ) ;
adj[ my_boss ].push_back( i ) ;
}
}
for(int i = 1 ; i <= N ; i++ )
bfs(i) ;
printf("%lld\n" , ans ) ;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |