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
    */
    
  • 相关阅读:
    vue 启动报错:`TypeError: Cannot read property 'range' of null`
    手动创建自己的npm包
    uni-app 拦截页面传参
    uni-app的vue.config.js
    插入排序
    选择排序
    设计模式--享元模式
    设计模式--代理模式
    原型链图片
    深度优先遍历和广度优先遍历
  • 原文地址:https://www.cnblogs.com/newadi/p/4662583.html
Copyright © 2011-2022 走看看