Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC codeSource Code Problem: 3659 User: caizixian Memory: 864K Time: 94MS Language: C++ Result: Accepted * Source Code #include <iostream> #include <vector> using namespace std; int N, c[10100], p[10100]; vector <vector <int> > E; vector <int> B; void traverse(int v) { for(int i=0; i<E[v].size(); i++) if(p[v] != E[v][i]) { p[E[v][i]] = v; traverse(E[v][i]); } if(c[v] == 0) { B.push_back(v); c[v]++; for(int i=0; i<E[v].size(); i++) { c[E[v][i]] += 2; B.push_back(E[v][i]); for(int j=0; j<E[E[v][i]].size(); j++) c[E[E[v][i]][j]]++; } } } int main() { scanf("%d", &N); E.resize(N); for(int i=0; i<N; i++) { p[i] = -1; c[i] = 0; } int u, v; for(int i=0; i<N-1; i++) { scanf( "%d %d", &u, &v); E[u-1].push_back(v-1); E[v-1].push_back(u-1); } traverse(0); int numRemove = 0; for(int i=B.size()-1; i>=0; i--) { bool canRemove = (c[B[i]] > 1); for(int j=0; j<E[B[i]].size(); j++) canRemove = canRemove && (c[E[B[i]][j]] > 1); if(canRemove) { c[B[i]]--; for(int j=0; j<E[B[i]].size(); j++) c[E[B[i]][j]]--; } numRemove += canRemove; } printf( "%d\n", B.size()-numRemove); } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator