poj 1986tarjan模板题
#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模板题的更多相关文章
- A Plug for UNIX POJ - 1087(模板题 没啥好说的。。就用了一个map)
题意: 几种插头,每一种都只有一个,但有无限个插头转换器,转换器(a,b) 意味着 可以把b转换为a,有几个设备,每个设备对应一种插头,求所不能匹配插头的设备数量 这个题可以用二分图做 , 我用的是最 ...
- poj 1330lca模板题离线算法
#include<iostream> #include<vector> using namespace std; const int MAX=10001; int pre[MA ...
- Jungle Roads POJ - 1251 模板题
#include<iostream> #include<cstring> #include<algorithm> using namespace std; cons ...
- POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]
题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...
- POJ Oulipo KMP 模板题
http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4 ...
- POJ 3264:Balanced Lineup(RMQ模板题)
http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. #i ...
- POJ 1741.Tree and 洛谷 P4178 Tree-树分治(点分治,容斥版) +二分 模板题-区间点对最短距离<=K的点对数量
POJ 1741. Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 34141 Accepted: 11420 ...
- Sliding Window POJ - 2823 单调队列模板题
Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...
- POJ 1287 Networking【kruskal模板题】
传送门:http://poj.org/problem?id=1287 题意:给出n个点 m条边 ,求最小生成树的权 思路:最小生树的模板题,直接跑一遍kruskal即可 代码: #include< ...
随机推荐
- Linux环境下SolrCloud集群环境搭建关键步骤
Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...
- Cenos7 切换单用户模式
CentOS 7在进入单用户的时候和6.x做了很多改变,下面让我们来看看如何进入单用户. 1.重启服务器,在选择内核界面使用上下箭头移动 2.选择内核并按“e” 3.修改参数 将rhgb quiet ...
- Hadoop集群搭建及MapReduce应用
一.Hadoop集群的搭建与配置 1.节点准备 集群规划: 主机名 IP 安装的软件 运行的进程 weekend 01 192.168.1.60 jdk.hadoop NameNode.DFSZKFa ...
- poj3735Training little cats
链接 构造矩阵 快速幂求解 构造矩阵a[i]为每个cati所拥有的花生总数 这里多加一维用来求和,具体是怎么求得可以看下面的一组例子 假设有3个cat a[] = {1,0,0,0} 构造单位矩阵来保 ...
- [转]在 Azure 云服务上设计大规模服务的最佳实践
本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...
- 解决ef第一次启动较慢
protected void Application_Start() { //禁用第一次ef查询对表__MigrationHistory的问题使用了ef的Code first会在第一次ef查询的时候会 ...
- php socket通信演示以及socket操作类
准备做Java的课程设计,一个通讯录.采用C/S架构.客户端用java FX和Java,服务器端用php,采用socket通信. 下面来讲一讲php的socket通信: 讲之前,得先讲一下TCP/IP ...
- java websocket 简单使用【案例】
现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器.这种 ...
- PHP serialize() 序列化函数
PHP serialize() 序列化函数 定义和用法 — 语法 string serialize ( mixed $value ) serialize() 返回字符串,此字符串包含了表示 value ...
- 解决重置PostgreSQL 9.6密码的问题
一.PostgreSql9.6重置密码的方法: 1.打开windows服务管理器,找到“postgresql-x64-9.6”服务,停止服务. 2.找到PostgreSQL9.6的安装目录(以我的E盘 ...