#include <bits/stdc++.h>
using namespace std;
#define pb push_back
inline int read(){
char ch=getchar();int ret=0;
while((ch^'0')>9) ch=getchar();
while((ch^'0')<10){
ret=(ret<<3)+(ret<<1)+(ch^'0');
ch=getchar();
}
return ret;
}
inline void write(const int p){
if(!p) return;
write(p/10);
putchar((p%10)|'0');
}
int n,a,b;
int dp[4][100010];
vector<int> ver[100010];
void dfs(const int p,const int f){
int flag=0x3f3f3f3f;
dp[0][p]=1;
for(int i:ver[p]){
if(i==f) continue;
dfs(i,p);
dp[0][p]+=min(dp[0][i],min(dp[1][i],dp[2][i]));
if(dp[1][i]>dp[0][i]){
dp[2][p]+=dp[0][i];
flag=0;
}
else{
dp[2][p]+=dp[1][i];
if(flag) flag=min(flag,dp[0][i]-dp[1][i]);
}
}
dp[1][p]=dp[2][p]+flag;
}
int main(){
n=read();
for(int i=1;i<n;++i){
a=read();b=read();
ver[a].pb(b);
ver[b].pb(a);
}
dfs(1,0);
write(min(dp[0][1],dp[1][1]));
putchar('\n');
return 0;
}
谜之TLE
注意本地调时输入样例立即A掉了