标签:
描述
输入
输出
样例输入
2
3 2
1 2 10
3 15
1 2
2 3
2 - 2
1 2 100
1 2
2 1
样例输出
10
25
100
100
记得 一开始 自己感觉特别难 很容易就超时了 一直不敢写 但是 结果却差好多 不会吵的 邻接表来一发
#include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<math.h> using namespace std; #define LL long long #define INF 0x3f3f3f3f #define N 40006 int k,y,w[N],t; int aa[N<<1]; struct node { int f,g,v; }a[N<<1]; void add(int e,int f,int g) { a[k].f=f; a[k].g=g; a[k].v=aa[e]; aa[e]=k++; } void bfs(int x,int sum) { if(x==y) t=sum; if(t!=-1) return ; for(int i=aa[x];i!=-1;i=a[i].v) { int f=a[i].f; if(!w[f]) { w[f]=1; bfs(f,sum+a[i].g); } } } int main() { int T; scanf("%d",&T); while(T--) { k=0; int n,m,e,f,g; memset(aa,-1,sizeof(aa)); scanf("%d%d",&n,&m); for(int i=1;i<n;i++) { scanf("%d%d%d",&e,&f,&g); add(e,f,g); add(f,e,g); } while(m--) { int x; t=-1; scanf("%d%d",&x,&y); memset(w,0,sizeof(w)); w[x]=1; bfs(x,0); printf("%d\n",t); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/a719525932/p/5799368.html