zoukankan      html  css  js  c++  java
  • How far away ?

    #include<iostream>
    #include <algorithm>
    using namespace std;
    const int M=40010;
    int dis[M],data[4*M],ext[4*M],head[M],value[4*M],ans[205],pa[M];
    int len,l,vis[M],da[900],ne[900],he[M],id[900];
    int find(int x)
    {
    	return x==pa[x]?x:find(pa[x]);
    }
    void add(int a,int b,int k)
    {
    	value[len]=k;
    	data[len]=b;
    	ext[len]=head[a];
    	head[a]=len++;
    }
    void ad(int a,int b,int k)
    {
    	id[l]=k;	
    	da[l]=b;
    	ne[l]=he[a];
    	he[a]=l++;
    }
    void tarjan(int u,int fa)
    {
    	vis[u]=1;
    	int v;
    	pa[u]=u;
    		for(int t=head[u];t!=-1;t=ext[t])
    	{
    		v=data[t];
    		if(v!=fa)
    		{
    			dis[v]=dis[u]+value[t];
    			tarjan(v,u);
    			
    		}
    		
    	}for(int t=he[u];t!=-1;t=ne[t])
    	{
    		v=da[t];
    		if(vis[v])ans[id[t]]=find(v);
    		
    	}
    	pa[u]=fa;
    	
    
    	
    	
    }
    void init()
    {
    	len=l=0;
    	memset(head,-1,sizeof head);
    	memset(ext,-1,sizeof ext);
    	memset(ne,-1,sizeof ne);
    	memset(he,-1,sizeof he);
    
    	memset(vis,0,sizeof vis);
    } 
    int main()
    {
    	int T;
    	int n,m;
    	int x,y,z;
    	int a[205],b[205];
    	scanf("%d",&T);
    	while(T--)
    	{
    		init();
    		scanf("%d%d",&n,&m);
    		for(int i=1;i<n;i++)
    		{
    			scanf("%d%d%d",&x,&y,&z);
    			add(x,y,z);
    			add(y,x,z);
    		}
    		for(int i=1;i<=m;i++)
    		{
    			scanf("%d%d",&a[i],&b[i]);
    			ad(a[i],b[i],i);
    			ad(b[i],a[i],i);	
    		}
    		dis[1]=0;
    		
    		tarjan(1,0);
    	//	puts("SDFWSD");
    		for(int i=1;i<=m;i++)
    		printf("%d
    ",dis[a[i]]+dis[b[i]]-2*dis[ans[i]]);
    		//printf("%d
    ",ans[i]);
    		
    	}
    }
    /*
    9
    7 5
    1 2 3
    1 3 2
    2 4 8
    2 5 5
    3 6 6
    3 7 4
    4 5
    7 3
    4 6
    2 6
    5 7
    11 6
    1 2 4
    1 3 5
    1 4 4
    2 10 6
    10 11 2
    3 5 7
    5 6 1
    4 7 3
    7 8 8
    7 9 9
    1 6
    11 9
    5 4
    7 8
    2 11
    8 9
    */
    
  • 相关阅读:
    学习笔记 MYSQL报错注入(count()、rand()、group by)
    学习笔记 HTTP参数污染注入
    学习笔记 MSSQL显错手工注入
    代码审计入门后审计技巧
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
  • 原文地址:https://www.cnblogs.com/newadi/p/4662583.html
Copyright © 2011-2022 走看看