即要求每个顶点的连线不能少于两条,只需判断哪些点的连线只有一条后,而这些点重新连为2条边需添加的边数为(sum+1)/2.sum为连线只有一条的点个数。
#include<cstdio> #include<cstring> using namespace std; #define max 10001 int result[max]; int main() { int n,i,a,b; while(scanf("%d",&n)!=EOF) { memset(result,0,sizeof(result)); for(i=0;i<n-1;i++) { scanf("%d%d",&a,&b); result[a]++; result[b]++; } int sum=0; for(i=0;i<=n;i++) { if(result[i]==1) sum++; } printf("%d\n",sum%2==0?sum/2:(sum/2+1)); } return 0; }