*tree cutting<pku 2378>

 
  
  // 一看乱七八糟的代码就知道写得很受挫, 写得断断续续, 首先没记录自然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 }

转载于:https://www.cnblogs.com/eth0/archive/2011/05/19/2051210.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值