hi guys..
I have a got WA for this problem 8/10.
Need ur help..
Here is my algorithm:
I used find all edges which degree is greater than one then i do recursively find the maximum value i can get with this degree.
Here is my code:
thx for ur attention
I have a got WA for this problem 8/10.
Need ur help..
Here is my algorithm:
I used find all edges which degree is greater than one then i do recursively find the maximum value i can get with this degree.
Here is my code:
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
typedef pair<int,int>pii;
typedef vector<pii> vpii;
#define MAX_N 8010
int n,a,b,c;
vpii edges[MAX_N];
bool used[MAX_N];
int value[MAX_N],maxxall,see;
void find(int parent){
used[parent]=1;
int maxx=0,maxx2=0;
//cout<<parent<<endl;
//system("pause");
for (int i=0;i<edges[parent].size();i++){
if (!used[edges[parent][i].second]){
find(edges[parent][i].second);
maxx=max(maxx,value[edges[parent][i].second]+edges[parent][i].first);
}
}
if (parent==see) {
bool sudah=false;
for (int i=0;i<edges[parent].size();i++){
if (value[edges[parent][i].second]+edges[parent][i].first==maxx && sudah==false){
sudah=true;
continue;
}
else maxx2=max(maxx2,value[edges[parent][i].second]+edges[parent][i].first);
}
value[parent]+=maxx+maxx2;
}
else value[parent]+=maxx;
//cout<<parent<<" "<<"maks "<<maxx<<' '<<maxx2<<endl;
maxxall=max(maxxall,value[parent]);
}
int main(){
scanf("%d",&n);
for (int i=0;i<n-1;i++){
scanf("%d %d %d",&a,&b,&c);
edges[a].push_back(pii(c,b));
edges[b].push_back(pii(c,a));
maxxall=max(maxxall,c);
}
for (int i=0;i<n;i++){
if (!used[i+1] && edges[i+1].size()>1){
//cout<<endl;
see=i+1;
find(i+1);
}
}
printf("%d\n",maxxall);
system("pause");
return 0;
}
thx for ur attention