#include<iostream>

#include<vector>

using namespace std;

const int N=40010;

int pre[N];//并查集

int visit[N];//是否经过

int ancestor[N];//祖先

int dis[N];//储存距离

int result[N];//储存结果

struct tre{

 int x,length;

};

vector<tre>tree[N];

struct  qu{

 int y,index;

};

vector<qu>qury[N];

void init(int n) {//初始化

 int i;

 for(i=1;i<=n;i++)

  tree[i].clear();

 for(i=1;i<=n;i++)

  qury[i].clear();

 memset(visit,0,sizeof(visit));

}

int find(int x) {//路径压缩

 if(x!=pre[x])

  pre[x]=find(pre[x]);

 return pre[x];

}

void infind(int x,int y) {//合并

 int f1=find(x);

 int f2=find(y);

    pre[f1]=f2;

 return ;

}

void tarjan(int u,int length) {

 visit[u]=1;

 dis[u]=length;//直接就可以的到距离

 ancestor[u]=u;

       pre[u]=u;

 int i;

 for(i=0;i<tree[u].size();i++) {

  int v=tree[u][i].x;

  if(visit[v]==0) {

   tarjan(v,length+tree[u][i].length);

   infind(u,v);

   ancestor[find(u)]=u;

  }

 }

  for(i=0;i<qury[u].size();i++) {

   int v=qury[u][i].y;

   if(visit[v])

    result[qury[u][i].index]=dis[u]+dis[v]-2*dis[ancestor[find(v)]];//重点

  }

  return ;

}

int main() {

 int n,m,i,j,k,a,b,c;

 char s[2];

 while(scanf("%d%d",&n,&m)!=EOF) {

  init(n);

  for(i=1;i<=m;i++) {

   scanf("%d%d%d%s",&a,&b,&c,s);

   tre h;

   h.x=b;

   h.length=c;

   tree[a].push_back(h);//储存

   h.x=a;

   h.length=c;

   tree[b].push_back(h);

  }

  scanf("%d",&k);

  for(i=1;i<=k;i++) {

   scanf("%d%d",&a,&b);

   qu h;

    h.y=b;

    h.index=i;

    qury[a].push_back(h);//储存

    h.y=a;

    h.index=i;

    qury[b].push_back(h);

  }

  tarjan(1,0);//

  for(i=1;i<=k;i++)

   printf("%d\n",result[i]);

 }

 return 0;

}

poj 1986tarjan模板题的更多相关文章

  1. A Plug for UNIX POJ - 1087(模板题 没啥好说的。。就用了一个map)

    题意: 几种插头,每一种都只有一个,但有无限个插头转换器,转换器(a,b) 意味着 可以把b转换为a,有几个设备,每个设备对应一种插头,求所不能匹配插头的设备数量 这个题可以用二分图做 , 我用的是最 ...

  2. poj 1330lca模板题离线算法

    #include<iostream> #include<vector> using namespace std; const int MAX=10001; int pre[MA ...

  3. Jungle Roads POJ - 1251 模板题

    #include<iostream> #include<cstring> #include<algorithm> using namespace std; cons ...

  4. POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]

    题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...

  5. POJ Oulipo KMP 模板题

    http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4 ...

  6. POJ 3264:Balanced Lineup(RMQ模板题)

    http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. #i ...

  7. POJ 1741.Tree and 洛谷 P4178 Tree-树分治(点分治,容斥版) +二分 模板题-区间点对最短距离<=K的点对数量

    POJ 1741. Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 34141   Accepted: 11420 ...

  8. Sliding Window POJ - 2823 单调队列模板题

    Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...

  9. POJ 1287 Networking【kruskal模板题】

    传送门:http://poj.org/problem?id=1287 题意:给出n个点 m条边 ,求最小生成树的权 思路:最小生树的模板题,直接跑一遍kruskal即可 代码: #include< ...

随机推荐

  1. synchronized(1)用法简介:修饰方法,修饰语句块

    注意: 同一个对象或方法在不同线程中才出现同步问题,不同对象在不同线程互相不干扰. synchronized方法有2种用法:修饰方法,修饰语句块 1.synchronized方法 是某个对象实例内,s ...

  2. 安装11g 数据库

    出现问题解决: 1.首先确认下载的安装包完整性.2解压包的时候,按顺序解压,解压第一个包后,解压第二个包的时候,要把解压地址与解压第二包的地址要一样. 安装的时候,需要把两个压缩包都解压,并将目录wi ...

  3. rhel7安装oracle 11gR2,所需的依赖包

    binutils-2.23.52.0.1-30.el7.x86_64 compat-libstdc++-33-3.2.3-61.x86_64compat-libstdc++-33-3.2.3-61.i ...

  4. gulp构建工具学习汇总

    前端脚手架____gulp配置文件------- https://pan.baidu.com/s/1eSs7COy 1:有了package.json 直接 npm install自动下载相应的npm包 ...

  5. AJPFX:关于面向对象的封装

    1.回顾        面向对象 -- 注重的是结果,强调的是具备功能的对象.        面向过程 -- 强调的是函数,注重的实现的过程.        函数:对功能的封装.            ...

  6. 堆排序原理及其js实现

    图文来源:https://www.cnblogs.com/chengxiao/p/6129630.html 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时 ...

  7. git 出现 The current branch is not configured for pull No value for key branch.master.merge found in configuration

    以下是我在网上找到的不错的文章,我参考后已解决我的问题: http://my.oschina.net/robinsonlu/blog/144085 http://www.cnblogs.com/zha ...

  8. 迅为电子HMI人机界面|CAN总线触摸屏

    本文转自迅为:http://www.topeet.com 协议特色: 1. 支持所有 CAN 协议,例如常用的 J1939 和 CANopen 协议. 2. 提供高度开放的 CAN 帧的编辑界面,用户 ...

  9. chmod - 改变文件的访问权限

    总揽 chmod [options] mode file... POSIX 选项: [-R] GNU 选项 (最短方式): [-cfvR] [--reference=rfile] [--help] [ ...

  10. WebDAV协议

    WebDAV是一项基于 Http1.1 协议的通信协议.它扩展了HTTP 1.1,在Get.Post.Put.Delete 等HTTP标准方法外添加了新方法,使应用程序可对Web Server直接读写 ...