# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
308784 | 2020-10-01T23:35:48 Z | wmrmr | Mousetrap (CEOI17_mousetrap) | C++17 | 947 ms | 64248 KB |
#include <bits/stdc++.h> using namespace std; const int MAX = 1e6+10; int dp[MAX], pai[MAX]; int n,t,m; vector<int> g[MAX]; void Quick(int v, int p) { pai[v] = p; for(int i=0;i<g[v].size();i++) { int prox = g[v][i]; if(prox == p) continue; Quick(prox,v); } } void DFS1(int v, int p) { int grau = g[v].size(); pair<int,int> mx; mx = {0,0}; if(grau==2){ dp[v] = 1; return; } for(int i=0;i<grau;i++) { int prox = g[v][i]; if(prox == p) continue; DFS1(prox,v); if(dp[prox] >= mx.first) mx.second = mx.first, mx.first = dp[prox]; else { if(dp[prox] > mx.second) mx.second = dp[prox]; } } dp[v] = grau + mx.second - 1; } void DFS2(int v, int f, int ans) { if(v == t) { printf("%d",ans); return; } if(f == 0) { DFS2(pai[v],v,dp[v]); return; } int grau = g[v].size(); if(grau == 3) { DFS2(pai[v],v,ans+1); return; } pair<int,int> mx; mx = {0,0}; for(int i=0;i<g[v].size();i++) { int prox = g[v][i]; if(prox == f || prox == pai[v]) continue; if(dp[prox] >= mx.first) mx.second = mx.first, mx.first = dp[prox]; else { if(dp[prox] > mx.second) mx.second = dp[prox]; } } DFS2(pai[v],v,ans+grau+mx.second-2); } int main() { scanf("%d %d %d",&n,&t,&m); for(int i=1;i<n;i++) { int a,b; scanf("%d %d",&a,&b); g[a].push_back(b); g[b].push_back(a); } Quick(t,0); int cur = m; while(pai[cur] != t) cur = pai[cur]; DFS1(cur,t); DFS2(m,0,0); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 19 ms | 23808 KB | Output is correct |
2 | Correct | 15 ms | 23808 KB | Output is correct |
3 | Correct | 16 ms | 23808 KB | Output is correct |
4 | Incorrect | 15 ms | 23808 KB | Output isn't correct |
5 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 430 ms | 62968 KB | Output is correct |
2 | Correct | 386 ms | 59052 KB | Output is correct |
3 | Correct | 947 ms | 64012 KB | Output is correct |
4 | Correct | 438 ms | 44024 KB | Output is correct |
5 | Correct | 934 ms | 64120 KB | Output is correct |
6 | Correct | 935 ms | 64248 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 19 ms | 23808 KB | Output is correct |
2 | Correct | 15 ms | 23808 KB | Output is correct |
3 | Correct | 16 ms | 23808 KB | Output is correct |
4 | Incorrect | 15 ms | 23808 KB | Output isn't correct |
5 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 19 ms | 23808 KB | Output is correct |
2 | Correct | 15 ms | 23808 KB | Output is correct |
3 | Correct | 16 ms | 23808 KB | Output is correct |
4 | Incorrect | 15 ms | 23808 KB | Output isn't correct |
5 | Halted | 0 ms | 0 KB | - |