HDU 2874
简单的tarjan
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> #define N 10010
#define M 20010
#define C 2001000
using namespace std; struct edge{
int v,c;
int next;
}City[M]; struct query{
int v,index;
int next;
}Query[C];
int ctot,qtot;
int chead[N],qhead[N];
int fa[N];
int Value[N];
int ans[C/2];
int rts[N]; void addcedge(int u,int v,int c){
City[ctot].v=v;
City[ctot].c=c;
City[ctot].next=chead[u];
chead[u]=ctot++;
} void addqedge(int u,int v,int c){
Query[qtot].v=v;
Query[qtot].index=c;
Query[qtot].next=qhead[u];
qhead[u]=qtot++;
} int find(int u){
int p=u;
while(p!=fa[p])
p=fa[p];
while(u!=p){
int r=fa[u];
fa[u]=p;
u=r;
}
return p;
} void Union(int u,int v){
int uf=find(u);
int uv=find(v);
fa[v]=uf;
} void tarjan(int now,int pre,int val,int root){
rts[now]=root;
fa[now]=now;
Value[now]=val;
for(int e=chead[now];e!=-1;e=City[e].next){
int v=City[e].v;
if(v==pre) continue;
tarjan(v,now,val+City[e].c,root);
Union(now,v);
}
for(int e=qhead[now];e!=-1;e=Query[e].next){
int v=Query[e].v;
if(ans[Query[e].index]==-1&&rts[v]==root){
int vf=find(v);
ans[Query[e].index]=Value[v]+Value[now]-2*Value[vf];
}
}
} int main(){
int n,m,c,g; int u,v,q;
while(scanf("%d%d%d",&n,&m,&c)!=EOF){
memset(chead,-1,sizeof(chead));
memset(qhead,-1,sizeof(qhead));
memset(fa,-1,sizeof(fa));
memset(Value,0,sizeof(Value));
memset(ans,-1,sizeof(ans));
memset(rts,0,sizeof(rts));
ctot=qtot=0;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&g);
addcedge(u,v,g);
addcedge(v,u,g);
}
for(int i=1;i<=c;i++){
scanf("%d%d",&u,&v);
addqedge(u,v,i);
addqedge(v,u,i);
}
for(int i=1;i<=n;i++){
if(fa[i]==-1)
tarjan(i,-1,0,i);
}
for(int i=1;i<=c;i++){
if(ans[i]!=-1)
printf("%d\n",ans[i]);
else puts("Not connected");
}
}
return 0;
}
HDU 2874的更多相关文章
- HDU 2874 Connections between cities (LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意是给你n个点,m条边(无向),q个询问.接下来m行,每行两个点一个边权,而且这个图不能有环路 ...
- HDU 2874 Connections between cities(LCA离线算法实现)
http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意: 求两个城市之间的距离. 思路: LCA题,注意原图可能不连通. 如果不了解离线算法的话,可以看我之 ...
- HDU 2874 Connections between cities(LCA(离线、在线)求树上距离+森林)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 题目大意:给出n个点,m条边,q个询问,每次询问(u,v)的最短距离,若(u,v)不连通即不在同 ...
- HDU 2874 Connections between cities(LCA+并查集)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2874 [题目大意] 有n个村庄,m条路,不存在环,有q个询问,问两个村庄是否可达, 如果可达则输出 ...
- hdu 2874(LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 思路:近乎纯裸的LCA,只是题目给出的是森林,就要判断是否都在同一颗树上,这里我们只需判断两个子 ...
- 【HDU 2874】Connections between cities(LCA)
dfs找出所有节点所在树及到树根的距离及深度及父亲. i和j在一棵树上,则最短路为dis[i]+dis[j]-dis[LCA(i,j)]*2. #include <cstring> #in ...
- hdu 2874 Connections between cities [LCA] (lca->rmq)
Connections between cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- Hdu 2874 Connections between cities
题意: 城市 道路 没有环 不一定连通的树 求两城市的最短距离 设想一下就是很多小树 那好办 思路: lca离线算法 然后有个技巧就是 每次我们tarjan一棵树不是最后树的节点都访问过并且孩子全 ...
- HDU 2874 Connections between cities(LCA Tarjan)
Connections between cities [题目链接]Connections between cities [题目类型]LCA Tarjan &题意: 输入一个森林,总节点不超过N ...
- hdu 2874(裸LCA)
传送门:Problem 2874 https://www.cnblogs.com/violet-acmer/p/9686774.html 改了一晚上bug,悲伤辣么大,明天再补详细题解 题解: 题目中 ...
随机推荐
- win10查看系统启动项,并且禁用
打开任务管理器,有一个叫做start up的选项卡,里面的东西就是启动项. 右键选中需要disable的,然后禁用.
- firewalld使用
1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...
- 利用python开发的flappy bird 游戏
python 中 pygame模块能让我们很方便的编写游戏,16年我用python 仿制了flappy bird 游戏,下面是游戏的完整代码以及素材,分享给大家. 第一个python文件,flappy ...
- [Offer收割]编程练习赛33
矩阵游戏II 把每列的数字加起来当一行处理.因为每次操作两列,所以最后最多剩下一个负数.如果负数的个数是偶数,直接所有数字的绝对值加起来即可:若负数个数为奇数,把所有数的绝对值加起来减去其中最小的绝对 ...
- 部署Seafile服务
介绍 官网:https://www.seafile.com 客户端/服务端下载:https://www.seafile.com/download/ 中文安装教程(MySQL版):http://manu ...
- RGB_D_开发征程(使用Kinect)
学习历程依此为纲! Kinect学习资料: kinect和openNI开发资料汇总:http://blog.csdn.net/chenli2010/article/details/6887646 原始 ...
- 带你认识闻名遐迩的ZBrush
ZBrush®是一款数字雕刻和绘画软件,它以其强大的功能和直观的工作流程彻底改变了3D行业.ZBrush 4R8是目前最新版本,它秉持一贯的简洁界面风格,给如今的数字艺术工作者提供了世界领先的工具.它 ...
- MongoDB 学习笔记(六):备份与用户管理
一.启动项 1.在启动数据库服务时可以在命令行输入mongod命令,然后直接带一些参数,比如“mongod --dbpath D:\Installations\MongoDB-2.4.6\MongoD ...
- public static final 的用法
public satic final 修饰后变量的名字全部用大写,定以后可以用类名直接访问,定义的变量不能被修改 所有的接口成员已经是静态,由于接口没有方法所有所以必须先赋值才行,可以直接用接口名调用 ...
- JS 封装一个显示时间的函数
s(); function s (){ var mydate=new Date(); var y = mydate.getFullYear(); var m = mydate.getMonth(); ...