Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function dfs(v: int, p: int, gr: int[][], dp: int[]){
- dp[v] = 0;
- let x = 0;
- for(let i = 0; i < gr[v].length(); i += 1){
- let u = gr[v][i];
- if(u != p){
- dfs(u, v, gr, dp);
- dp[v] += dp[u];
- if(dp[u] == 0){
- x += 1;
- }
- }
- }
- if(x > 0){
- x -= 1;
- }
- dp[v] += x;
- }
- function max(a: int, b: int)->int{
- if(a > b){
- return a;
- }
- return b;
- }
- function dfs2(v: int, p: int, gr: int[][], dp: int[], ans: int[]){
- let sum = 1;
- let x = 0;
- for(let i = 0; i < gr[v].length(); i += 1) {
- let u = gr[v][i];
- sum += dp[u];
- if (dp[u] == 0){
- x+=1;
- }
- }
- ans.push(sum + max(0, x - 1));
- for(let i = 0; i < gr[v].length(); i += 1){
- let u = gr[v][i];
- if(u != p){
- let cur = 0;
- if(dp[u] == 0){
- cur+=1;
- }
- dp[v] = sum - 1 - dp[u] + max(0, x - 1 - cur);
- dfs2(u, v, gr, dp, ans);
- }
- }
- }
- function solve(input: string) -> string {
- let gr: int[][]=[];
- let dp: int[] = [];
- let ans: int[] = [];
- let lines = input.split("");
- let n = int(lines[0]);
- for(let i = 0; i < n; i+=1){
- gr.push([]);
- }
- for(let i = 1; i < n; i+=1){
- let l = input.split(" ");
- let u = int(l[0]);
- let v = int(l[1]);
- u-=1;
- v-=1;
- gr[u].push(v);
- gr[v].push(u);
- }
- dfs(0,-1,gr,dp);
- dfs2(0,-1,gr,dp,ans);
- ans.sort();
- let out = string(ans[0]);
- return out;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement