Codeforces Round #572 (Div. 1) A1. Add on a Tree ###K ###K //K

题目链接:https://codeforces.ml/contest/1188/problem/A1

题意:每次可以选两个叶节点,使得最短路径的边全部加上任意一个值x  问在有限次的操作中,能否使得边上为任意实数都能满足条件

思路:刚开始自己考虑的是 每条边必须有两种经过的方式就可以, 即除了叶节点以外的点,其他度数的点度数要为3

这样可以让每条边都可以得到调整,总能调整到要求的数

但自己把1默认为根了, 所以1本身判断的时候就错了, 正解是 直接看每个点的度数,只要没有度数为2的点出现即可,

因为度数为2的点一旦出现,两条边的经过方式肯定只有一种

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define pb push_back
 5 const int maxn =2e5+10;
 6 const int mod=1e9+7;
 7 vector<int>E[maxn];
 8  
 9  
10 int main()
11 {
12     ios::sync_with_stdio(false);
13     cin.tie(0);
14     int n;
15     cin>>n;
16     for(int i=1;i<n;i++)
17     {
18         int u,v;
19         cin>>u>>v;
20         E[u].pb(v);
21         E[v].pb(u);
22     }
23     for(int i=1;i<=n;i++)
24     {
25         int sum=E[i].size();
26         if(sum<3&&sum!=1)
27         {
28             cout<<"NO"<<'\n';
29             return 0;
30         }
31     }
32     cout<<"YES"<<'\n';
33  
34  
35  
36  
37  
38  
39  
40 }
View Code

 

第一次的错误代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define pb push_back
 5 const int maxn =2e5+10;
 6 const int mod=1e9+7;
 7 vector<int>E[maxn];
 8 int vis[maxn];
 9 int cnt[maxn];
10  
11 void dfs(int u,int fa)
12 {
13     for(auto &v:E[u])
14     {
15         if(v==fa)
16             continue;
17         dfs(v,u);
18         cnt[u]+=cnt[v];
19     }
20     cnt[u]++;
21 }
22  
23 int main()
24 {
25     ios::sync_with_stdio(false);
26     cin.tie(0);
27     int n;
28     cin>>n;
29     for(int i=1;i<n;i++)
30     {
31         int u,v;
32         cin>>u>>v;
33         E[u].pb(v);
34         E[v].pb(u);
35     }
36     if(n==2)
37     {
38         cout<<"YES"<<'\n';
39         return 0;
40     }
41     dfs(1,0);
42     for(int i=1;i<=n;i++)
43     {
44         if(cnt[i]==1)
45             continue;
46         int sum=E[i].size();
47         if(sum<3)
48         {
49             cout<<"NO"<<'\n';
50             return 0;
51         }
52     }
53     cout<<"YES"<<'\n';
54  
55  
56  
57  
58  
59  
60  
61 }
View Code

 

posted @ 2020-08-03 19:26  canwinfor  阅读(112)  评论(0)    收藏  举报