답안 #584947

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
584947 2022-06-28T07:24:09 Z amunduzbaev Mousetrap (CEOI17_mousetrap) C++17
45 / 100
837 ms 86364 KB
#include "bits/stdc++.h"
using namespace std;
 
#define ar array
typedef int64_t ll;
#define int long long

const int N = 1e6 + 5;
vector<int> edges[N];
int n, t, m, dp[N], is[N];
int c[N];

void dfs(int u, int p = -1){
	is[u] = (u == t), c[u] = -1;
	vector<int> t;
	for(auto x : edges[u]){
		if(x == p) continue;
		dfs(x, u);
		is[u] |= is[x];
		if(!is[x]) t.push_back(x);
		else c[u] = x;
	}
	sort(t.begin(), t.end(), [&](int& i, int& j){
		return dp[i] > dp[j];
	});
	edges[u] = t;
	
	if(t.empty()) dp[u] = 0;
	else {
		dp[u] = t.size();
		if((int)t.size() > 1) dp[u] += dp[t[1]]; 
	}
}

signed main(){
	ios::sync_with_stdio(0); cin.tie(0);
	
	cin>>n>>t>>m;
	assert(t != m);
	//~ if(t == m){
		//~ cout<<0<<"\n";
		//~ return 0;
	//~ }
	for(int i=1;i<n;i++){
		int a, b; cin>>a>>b;
		edges[a].push_back(b);
		edges[b].push_back(a);
	}
	
	dfs(m);
	int pos = 0, res = 0;
	while(m != t){
		pos++;
		vector<int>& t = edges[m];
		if(pos >= (int)t.size()){
			pos -= (int)t.size();
			res += (int)t.size();
		} else {
			res += dp[t[pos]] + (int)t.size();
			pos = 1e9;
		}
		m = c[m];
	}
	
	cout<<res<<"\n";
}

/*

8 7 1
1 2
2 3
3 4
3 5
3 6
4 7
4 8

*/
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23764 KB Output is correct
2 Correct 11 ms 23764 KB Output is correct
3 Correct 11 ms 23776 KB Output is correct
4 Correct 11 ms 23820 KB Output is correct
5 Correct 13 ms 23796 KB Output is correct
6 Correct 13 ms 23764 KB Output is correct
7 Correct 12 ms 23800 KB Output is correct
8 Correct 11 ms 23764 KB Output is correct
9 Correct 13 ms 23792 KB Output is correct
10 Correct 12 ms 23764 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 351 ms 86364 KB Output is correct
2 Correct 288 ms 80092 KB Output is correct
3 Correct 800 ms 84696 KB Output is correct
4 Correct 377 ms 54152 KB Output is correct
5 Correct 826 ms 84648 KB Output is correct
6 Correct 837 ms 84708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23764 KB Output is correct
2 Correct 11 ms 23764 KB Output is correct
3 Correct 11 ms 23776 KB Output is correct
4 Correct 11 ms 23820 KB Output is correct
5 Correct 13 ms 23796 KB Output is correct
6 Correct 13 ms 23764 KB Output is correct
7 Correct 12 ms 23800 KB Output is correct
8 Correct 11 ms 23764 KB Output is correct
9 Correct 13 ms 23792 KB Output is correct
10 Correct 12 ms 23764 KB Output is correct
11 Incorrect 12 ms 23764 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 23764 KB Output is correct
2 Correct 11 ms 23764 KB Output is correct
3 Correct 11 ms 23776 KB Output is correct
4 Correct 11 ms 23820 KB Output is correct
5 Correct 13 ms 23796 KB Output is correct
6 Correct 13 ms 23764 KB Output is correct
7 Correct 12 ms 23800 KB Output is correct
8 Correct 11 ms 23764 KB Output is correct
9 Correct 13 ms 23792 KB Output is correct
10 Correct 12 ms 23764 KB Output is correct
11 Correct 351 ms 86364 KB Output is correct
12 Correct 288 ms 80092 KB Output is correct
13 Correct 800 ms 84696 KB Output is correct
14 Correct 377 ms 54152 KB Output is correct
15 Correct 826 ms 84648 KB Output is correct
16 Correct 837 ms 84708 KB Output is correct
17 Incorrect 12 ms 23764 KB Output isn't correct
18 Halted 0 ms 0 KB -