| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1312994 | lev | Forensic (NOI12_forensic) | C++20 | 2 ms | 2616 KiB |
#include <bits/stdc++.h>
// Kazusa_Megumi
#define ll long long
#define fi first
#define se second
#define pii pair<int, int>
#define all(a) a.begin(), a.end()
using namespace std;
#ifdef LOCAL
#include "C:\Users\Dell\Downloads\template\template\icpc-notebook\Utilities\debug.h"
#else
#define debug(...) 42
#endif
const int mn = 5e5 + 5, mod = 1e9 + 7, inf = 2e9;
int n, nxt[mn], vis[mn], dp[mn], cnt = 0, loop = 0;
void down(int u){
vis[u] = 1, dp[u] = 0;
cnt ++;
if(nxt[u] == -1) return;
if(vis[nxt[u]]){
loop = 1;
return;
}
down(nxt[u]);
}
int f(int u){
if(nxt[u] == -1) return 1;
if((vis[nxt[u]] && loop) || u == 1) return - 1e9;
if(dp[u] != -1) return dp[u];
dp[u] = 0;
if(vis[u] == 1) return - 1e9;
vis[u] = 1;
dp[u] = f(nxt[u]) + 1;
vis[u] = 2;
return dp[u];
}
void solve() {
cin >> n;
for(int i = 1; i <= n; i++){
cin >> nxt[i];
if(nxt[i] != -1) nxt[i] ++;
}
down(1);
memset(dp, -1, sizeof(dp));
int ans = 0;
for(int i = 1; i <= n; i++){
if(!vis[i]){
debug(i, f(i));
ans = max(ans, f(i));
}
}
debug(ans, cnt);
cout << ans + cnt << '\n';
}
main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
if (fopen("Kazuki.INP", "r")) {
freopen("Kazuki.INP", "r", stdin);
freopen("Kazuki.OUT", "w", stdout);
}
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
컴파일 시 표준 에러 (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... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
