解:
2025-07-05 17:24:23
发布于:浙江
11阅读
0回复
0点赞
dfs部分代码
void dfs(int x,int fa){
if(flag) return ;
s[x] = 1;
for(int i = 0;i<ve[x].size();i++){
int y = ve[x][i];
if(y==fa) continue;
dfs(y,x);
s[x]+=s[y];
}
if(s[x]>3) flag = true;
else if(s[x] == 3){
if(fa){
s[x] = 0;
ans++;
}
}
}
全部代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+9;
vector<int> ve[N];
int s[N];
int n,flag,ans;
void dfs(int x,int fa){
if(flag) return ;
s[x] = 1;
for(int i = 0;i<ve[x].size();i++){
int y = ve[x][i];
if(y==fa) continue;
dfs(y,x);
s[x]+=s[y];
}
if(s[x]>3) flag = true;
else if(s[x] == 3){
if(fa){
s[x] = 0;
ans++;
}
}
}
int main(){
cin>>n;
for(int i = 1;i<n;i++){
int u,v;
cin>>u>>v;
ve[u].push_back(v);
ve[v].push_back(u);
}
flag = false;
if(n%3) cout<<"-1";
else{
dfs(1,0);
if(flag) cout<<"-1";
else cout<<ans;
}
return 0;
}
这里空空如也
有帮助,赞一个