贪心:有多少叶子节点,就有多少条路径。每个父亲节点与各个儿子节点相连的路径中,只有最小的那个会被选中。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const long long MAXM=0X3F3F3F3F;
const int N=10000;
long long l[N+5];
long long min(long long x,long long y)
{
return x<y?x:y;
}
void work(int n)
{
int i,j,f,cnt;
long long len,ans;
for(i=0;i<=n;i++)
l[i]=MAXM;
for(i=1;i<n;i++)
{
scanf("%d%lld",&f,&len);
l[f]=min(l[f],len);
}
ans=0;
cnt=0;
for(i=0;i<n;i++)
{
if(l[i]!=MAXM)
ans+=l[i];
else
cnt++;
}
printf("%d %lld\n",cnt,ans);
}
int main()
{
int T,n;
T=0;
while(~scanf("%d",&n))
{
printf("Case #%d: ",++T);
work(n);
}
return 0;
}