// 一看乱七八糟的代码就知道写得很受挫, 写得断断续续, 首先没记录自然tle,记忆搜索之后,爆空间,试着少一位,多亏数据弱,
 //  好心让我过了,但是怎么感觉都很错误...
1 Source Code
2
3 Problem: 2378 User: eth1
4 Memory: 40008K Time: 329MS
5 Language: C++ Result: Accepted
6 Source Code
7 #include <iostream>
8 #include <algorithm>
9 #include <vector>
10 #include <cstring>
11 using namespace std;
12 vector<int> map[10001];
13 int vis[10001][1000],viss[10001];
14 int solve2(int k,int t)
15 {
16 int ans=0;
17 //if(vis[])
18 for(int i=0;i<map[t].size();i++)
19 {
20 if(!viss[map[t][i]])
21 {
22 viss[map[t][i]]=1;
23 if(vis[t][map[t][i]])
24 {
25 ans+=vis[t][map[t][i]]+1;
26 continue;
27 }
28 ans+=solve2(t,map[t][i])+1;
29 }
30 }
31 return vis[k][t]=ans;
32 }
33 int solve1(int t)
34 {
35 int ans=-1;
36 for(int i=0;i<map[t].size();i++)
37 {
38 if(!viss[map[t][i]])
39 {
40 int k = map[t][i];
41 viss[k]=1;
42 ans = max(ans,solve2(t,k)+1);
43 }
44 }
45 return ans;
46 }
47 int main()
48 {
49 int n;
50 cin>>n;
51 int m=n/2;
52 int a,b;
53 for(int i=1;i<=n-1;i++)
54 {
55 cin>>a>>b;
56 map[a].push_back(b);
57 map[b].push_back(a);
58 }
59 memset(vis,0,sizeof(vis));
60 int flag=0;
61 for(int i=1;i<=n;i++)
62 {
63 if(!map[i].empty())
64 {
65 memset(viss,0,sizeof(viss));
66 viss[i]=1;
67 int tttt=solve1(i);
68 if(tttt <= m)
69 {
70 cout<<i<<endl;//<<"*******"<<tttt<<endl;
71 flag=1;
72 }
73 //cout<<i<<"*******"<<tttt<<endl;
74 }
75 }
76 if(!flag) cout<<"NONE"<<endl;
77 return 0;
78 }
 posted on 2011-05-19 16:24  eth0  阅读(150)  评论(0编辑  收藏  举报