wa了几次,就努力坚持几次。最终我A了,就其原因还是基础不扎实(注意I64d 与lld).
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
using namespace std;
vector<int>tree[100010];
long long cost[100010];
long long h[100010];
int a, b,n;
// long long c;
// long long int sum ;
void DFS(int a)
{
int i;
if(tree[a].empty())return;
int b = tree[a].size();
for(i = 0; i < b; i ++)
{
DFS(tree[a][i]);
if(h[a] < cost[tree[a][i]]+h[tree[a][i]])
{
h[a] = cost[tree[a][i]]+h[tree[a][i]]; //从一条路寻找下去。。
}
}
}
int main()
{
long long int sum ;
long long c;
while(cin>>n)
{
memset(h,0,sizeof(h));
memset(cost, 0,sizeof(cost));
memset(tree, 0, sizeof(tree));
sum = 0;
for(int i = 1; i < n; i ++)
{
//cin>>a>>b>>c;
scanf("%d%d%I64d",&a,&b,&c); //OJ平台一般都得用I64d。。坑了好多次。。 可以用cin代替scanf,但读入太慢。。
tree[a].push_back(b);
cost[b] = c;
sum += c;
}
DFS(1);
//printf("%d %d\n",sum, h[1]);
cout<<sum-h[1]<<endl;
}
return 0;
}