Http://poj.org/problem? Id = 1655
Same as poj3107, only one vertex with the smallest value must be output.
The num [] record of the initial answer value is guilty...
Code:
# Include <cstdio>
# Include <cstring>
# Define max (A, B) A> B? A: B
Using namespace STD;
Const int max = 20001;
Int k, n, Min, anspoint, ansnum;
Int vis [Max], head [Max], num [Max];
Struct edge {
Int V, next;
} Edge [2 * max];
Void addedge (int A, int B ){
Edge [K]. V = B;
Edge [K]. Next = head [a];
Head [a] = K ++;
}
Void DFS (int x ){
Int I, V, min =-1;
Num [x] = 1;
Vis [x] = 1;
For (I = head [X]; I; I = edge [I]. Next ){
V = edge [I]. V;
If (vis [v]) continue;
DFS (v );
Num [x] + = num [v];
Min = max (Min, num [v]);
}
Min = max (Min, N-num [x]);
If (Min <min ){
Anspoint = X;
Min = min;
Ansnum = min;
} Else if (min = min & anspoint> X ){
Anspoint = X;
Ansnum = min;
}
}
Int main (){
Int t, x, y;
Scanf ("% d", & T );
While (t --){
Scanf ("% d", & N );
K = 1;
Memset (Head, 0, sizeof (head ));
For (INT I = 1; I <n; I ++ ){
Scanf ("% d", & X, & Y );
Addedge (x, y );
Addedge (Y, X );
}
Memset (VIS, 0, sizeof (VIS ));
Memset (Num, 0, sizeof (Num ));
Min = max;
DFS (1 );
Printf ("% d \ n", anspoint, ansnum );
}
Return 0;
}