1008 transaction transaction transaction

来源:互联网 发布:js html传值 编辑:程序博客网 时间:2024/06/05 08:44

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6201

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>using namespace std;#define MAX 200005typedef long long ll;int len[MAX];bool vis[MAX];int num[MAX];int n,m;struct Node{int v,u;int id;};Node node[MAX];int head[MAX];int cnt=0;int top=0;int a,b;int c;int ans=0;void init(){    memset(head,-1,sizeof(head));    memset(vis,0,sizeof(vis));    memset(len,0,sizeof(len));    cnt=0;    top=0;}void add_e(int u,int v,int id){    node[cnt].v=v;    node[cnt].u=head[u];    node[cnt].id=id;    head[u]=cnt++;}int dfs(int j){      for(int i=head[j];i!=-1;i=node[i].u)    {        if(!vis[i])        {          vis[i]=true;          len[j]=max(len[j]-node[i].id+dfs(node[i].v),len[j]-node[i].id+num[node[i].v]);        }    }    ans=max(len[j]-num[j],ans);    return len[j];}int main(){    int t;    scanf("%d",&t);    while(t--)    {        init();        ans=0;        scanf("%d",&n);        for(int i=1;i<=n;i++)        {            scanf("%d",&num[i]);        }        for(int i=0;i<n-1;i++)        {            // 无向图           scanf("%d%d%d",&a,&b,&c);            add_e(a,b,c);            add_e(b,a,c);        }        for(int i=1;i<=n;i++)        {            dfs(i);        }   printf("%d\n",ans);    }    return 0;}