C++ Good Edges Infosys https://telegram.me/+19mMyesoV7llODI1 | HackWithInfy Exam Solutions
C++
Good Edges
Infosys
https://telegram.me/+19mMyesoV7llODI1
#include
using namespace std;
const int N=500005;
typedef long long ll;
int T,n,k,t,h[N];
ll dp[N][2];
struct edge{
int ver,net;
ll val;
}f[N*2];
void add(int x,int y,int z){
f[++t].net=h[x];
h[x]=t,f[t].ver=y;
f[t].val=z;
}
void dfs(int x,int fa){
dp[x][0]=dp[x][1]=0;
priority_queue q;
for(int i=h[x];i;i=f[i].net){
int y=f[i].ver;
if(y==fa) continue;
dfs(y,x);
dp[x][0]+=dp[y][0];
q.push(dp[y][1]+f[i].val-dp[y][0]);
}
dp[x][1]=dp[x][0];
int p=k;
while(p--&&q.size()&&q.top()>0){
if(p) dp[x][1]+=q.top();
dp[x][0]+=q.top();
q.pop();
}
}
int main(){
scanf("%d",&T);
while(T--){
int x,y,z;t=0;
scanf("%d%d",&n,&k);
for(int i=1;i scanf("%d%d%d",&x,&y,&z);
add(x,y,z),add(y,x,z);
}
dfs(1,0);
printf("%lld\n",dp[1][0]);
for(int i=1;i<=n;++i) h[i]=0,dp[i][0]=dp[i][1]=0;
}
return 0;
}
C++
Good Edges
Infosys
https://telegram.me/+19mMyesoV7llODI1