Sidevõrk

시간 제한3초메모리 제한1024 MB

요약
트리에서 정점 두 개를 제거했을 때 생기는 각 성분 크기의 제곱합을 구하되, T에 따라 최댓값 또는 최솟값을 출력한다.
난이도

어려움10점 중 8점

유형
트리, DFS, 동적 계획법, 그리디
정답자
아직 제출이 없습니다

문제

Sidevõrk koosneb NN serverist, mis on nummerdatud 1…N1 \ldots N, ja N−1N - 1 neid ühendavast kaablist. Võrk on sidus: igast serverist on võimalik andmeid edastada igasse teise serverisse. Kui mõni server rikki läheb, siis tema kaudu andmeid edastada ei saa, ja see võib põhjustada häireid ka teiste serverite vahelises sides. Sidefirma tahab hinnata, millised võivad olla tagajärjed, kui rikki läheb korraga kaks serverit.

Kui serverite rikkega jaguneb võrk kk osaks, milles on vastavalt a_1a\_1, a_2a\_2, …\ldots, a_ka\_k serverit, siis on sellise võrgu sidususkoefitsient C=a_12+a_22+…+a_k2C = a\_1^2 + a\_2^2 + \ldots + a\_k^2. Näiteks kui kõrvaloleval joonisel kujutatud võrgus lähevad rikki serverid 1 ja 5, jaguneb võrk 33 osaks, kus ühes osas on 22 serverit (2 ja 4), teises osas 55 serverit (3, 6, 11, 12 ja 8) ning kolmandas osas 33 serverit (7, 9 ja 10). Selliselt jagunenud võrgu sidususkoefitsient on seega C=22+52+32=38C = 2^2 + 5^2 + 3^2 = 38.

Kirjutada programm, mis leiab suurima ja vähima võimaliku sidususkoefitsiendi, kui antud võrgus lähevad rikki täpselt kaks serverit.

입력

Sisendi esimesel real on täisarv TT (1≤T≤21 \le T \le 2). T=1T = 1 korral peab programm leidma maksimaalse, T=2T = 2 korral aga minimaalse võimaliku sidususkoefitsiendi.

Sisendi teisel real on serverite arv NN (3≤N≤1053 \le N \le 10^5).

Järgmisel N−1N - 1 real on igaühel kaks täisarvu A_iA\_i ja B_iB\_i (1≤A_i≤N1 \le A\_i \le N, 1≤B_i≤N1 \le B\_i \le N), mis näitavad, et kaabel ii ühendab servereid A_iA\_i ja B_iB\_i.

출력

Väljastada üks täisarv, vastavalt TT väärtusele sidususkoefitsiendi maksimum või miinumum.

예제2

  1. 예제 1

    입력
    2
    12
    1 2
    1 3
    2 4
    2 5
    3 6
    3 11
    5 7
    6 12
    6 8
    7 9
    7 10
    
    예상 출력
    28
    
  2. 예제 2

    입력
    1
    4
    1 2
    2 3
    3 4
    
    예상 출력
    4