★★☆   输入文件:ThefallingofZLX.in   输出文件:ThefallingofZLX.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】

正当革命如火如荼,情侣教会日薄西山之时,SOX和FFF的分歧却越来越大,SOX认为情侣教会不合适的、无限制的秀恩爱和阶级歧视值得反对,而FFF认为一切情侣都该从这个世界上消失。

SOX先发制人,率先接管了全国政权并突袭了FFF,暗杀了FFF的首领,FFF的红色革命事业遭到了空前的打击,一些FFF团员积极抵抗,另一些FFF团员隐居避世,而一些FFF团员则走向极端,参加了一个邪恶组织:诅咒教会

你虽然对SOX下山摘桃子的行为不满,但你对邪教更不满。在对诅咒教会的长期调查中,你发现该组织的操纵者是亡灵巫师ZLX!现在,维护正义的使命降到了你身上!你和其他的一些远征军将士前往ZLX的城堡,却掉入了ZLX的魔法陷阱--扭曲虚空,扭曲虚空由n个魔法结界空间组成,m条虚空隧道连接着它们,你和其他的远征军将士(恰好有n个)分散在魔法结界空间里,只有会合在一起,你们才能冲破封锁(扭曲虚空是一颗树)。现在,你向平行世界的你提出了疑问,如果给出两个人会合,总共至少需要多少魔法能量?

已知虚空隧道的长度与消耗的魔法能量在数值上相等。

ZLX的末日已经到临,等到你冲出虚空隧道,亲手结果了ZLX吧!

【输入格式】

第一行一个正整数N,代表魔法结界空间的个数,一个正整数M,代表虚空隧道的个数

接下来M行,每行三个数u,v,w,代表虚空隧道连接的两个点和虚空隧道的长度

接下来一个正整数Q,代表查询个数

接下来Q行,每行两个数u,v代表询问从u到v需要消耗的魔法能量

【输出格式】

Q行,每行一个正整数

【样例输入】

6 5

1 2 7

1 3 3

2 4 5

3 5 7

4 6 6

5

3 4

6 3

5 1

4 3

4 2

【样例输出】

15

21

10

15

5

【提示】

对于20%的数据,n<=300,q<=300

对于40%的数据,n<=2000,q<=2000

对于100%的数据,n<=100000,q<=100000,w<=32767,m=n−1

果lca求两点距离

屠龙宝刀点击就送

tarjan法rank1

#include <cstdio>
#include <vector>
#include <cctype>
#define N 100005
inline void read(int &x)
{
register char ch=getchar();
for(x=;!isdigit(ch);ch=getchar());
for(;isdigit(ch);x=x*+ch-'',ch=getchar());
}
using namespace std;
vector<int>vec[N];
int n,m,q,y,cnt,to[N<<],head[N<<],nextt[N<<],u[N],v[N],dad[N],fa[N],ans[N],val[N],DIS[N<<];
int find_(int x) {return x==fa[x]?x:fa[x]=find_(fa[x]);}
void Dfs(int x)
{
fa[x]=x;
for(register int i=head[x];i;i=nextt[i])
{
int v=to[i];
if(v==dad[x]) continue;
dad[v]=x;
val[v]=DIS[i]+val[x];
Dfs(v);
}
for(register int i=;i<vec[x].size();++i) if(dad[y=x^u[vec[x][i]]^v[vec[x][i]]]) ans[vec[x][i]]=find_(y);
fa[x]=dad[x];
}
int Main()
{
freopen("ThefallingofZLX.in","r",stdin);
freopen("ThefallingofZLX.out","w",stdout);
read(n); read(m);
for(int U,V,W;m--;)
{
read(U); read(V); read(W);
nextt[++cnt]=head[U];to[cnt]=V;DIS[cnt]=W;head[U]=cnt;
nextt[++cnt]=head[V];to[cnt]=U;DIS[cnt]=W;head[V]=cnt;
}
read(q);
for(register int i=;i<=q;++i)
{
read(u[i]); read(v[i]);
vec[u[i]].push_back(i);
vec[v[i]].push_back(i);
}
Dfs();
for(register int i=;i<=q;++i) printf("%d\n",val[u[i]]+val[v[i]]-*val[ans[i]]);
return ;
}
int sb=Main();
int main(int argc,char *argv[]) {;}

倍增

#include <cstdio>
#define N 100005
int n,m,q,cnt,to[N<<],head[N<<],nextt[N<<],dep[N],dad[N][],val[N],DIS[N<<];
void Dfs(int x)
{
dep[x]=dep[dad[x][]]+;
for(int i=;dad[x][i];++i) dad[x][i+]=dad[dad[x][i]][i];
for(int i=head[x];i;i=nextt[i])
{
int v=to[i];
if(v==dad[x][]) continue;
dad[v][]=x;
val[v]=DIS[i]+val[x];
Dfs(v);
}
}
inline void swap(int &m,int &n)
{
int tmp=n;
n=m;
m=tmp;
}
inline int lca(int x,int y)
{
if(dep[x]>dep[y]) swap(x,y);
for(int i=;i>=;--i)
if(dep[dad[y][i]]>=dep[x])
y=dad[y][i];
if(x==y) return x;
for(int i=;i>=;--i)
if(dad[y][i]!=dad[x][i])
y=dad[y][i],x=dad[x][i];
return dad[x][];
}
int main(int argc,char *argv[])
{
freopen("ThefallingofZLX.in","r",stdin);
freopen("ThefallingofZLX.out","w",stdout);
scanf("%d%d",&n,&m);
for(int u,v,w;m--;)
{
scanf("%d%d%d",&u,&v,&w);
nextt[++cnt]=head[u];to[cnt]=v;DIS[cnt]=w;head[u]=cnt;
nextt[++cnt]=head[v];to[cnt]=u;DIS[cnt]=w;head[v]=cnt;
}
Dfs();
scanf("%d",&q);
for(int u,v;q--;)
{
scanf("%d%d",&u,&v);
int Lca=lca(u,v);
printf("%d\n",val[u]+val[v]-*val[Lca]);
}
return ;
}

COGS 2075. [ZLXOI2015][异次元圣战III]ZLX的陨落的更多相关文章

  1. Ubuntu 14.10 -- 异次元软件世界

    Ubuntu 14.10 中文桌面版/服务器正式版下载 - 华丽免费易于入门的 Linux 操作系统 [ 系统工具 - Linux // 2014-10-25 ]     一说到 Linux,就不得不 ...

  2. cogs 2057. [ZLXOI2015]殉国

    2057. [ZLXOI2015]殉国 ★☆   输入文件:BlackHawk.in   输出文件:BlackHawk.out   评测插件时间限制:0.05 s   内存限制:256 MB [题目描 ...

  3. 在线倍增法求LCA专题

    1.cojs 186. [USACO Oct08] 牧场旅行 ★★   输入文件:pwalk.in   输出文件:pwalk.out   简单对比时间限制:1 s   内存限制:128 MB n个被自 ...

  4. 《Xenogears》(异度装甲)隐含的原型与密码

    <Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...

  5. SFC游戏列表(维基百科)

    SFC游戏列表 日文名 中文译名 英文版名 发行日期 发行商 スーパーマリオワールド 超级马里奥世界 Super Mario World 1990年11月21日 任天堂 エフゼロ F-Zero F-Z ...

  6. 网站收集ing....

    1.账号注册网址 http://bugmenot.com/ PS:只要输入相关网站域名就能立即完成网站注册 2.博客网站 CSDN,博客园,开源中国 3.破解网站 吾爱破解 4.矢量图标 http:/ ...

  7. 【Unity3D】利用Shader以及更改Mesh实现2D游戏的动态阴影效果

    最近看到一个非常有趣的益智小游戏,是一个盗贼进入房子偷东西的, 其实这种游戏市面上已经很多了,吸引我的是那个类似手电筒的效果, 主角走到哪里,光就到哪里,被挡住的地方还有阴影.有点类似策略游戏里的战争 ...

  8. >>> 主页推荐链接

    Apple专区 App Store 排行榜 App Store 排行榜 - 中国区 PC6苹果网 威锋网 第三方 环信 - 即时通讯云领导者 腾讯Bugly - Android Crash | iOS ...

  9. Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器)

    随着 Genymotion.BlueStacks 等电脑上的 Android 模拟器流行起来之后,似乎很多人都发现在电脑上运行使用安卓APP软件.畅玩手机游戏确实很有乐趣. 今天我们又发现了一款全新免 ...

随机推荐

  1. 牛客Professional Manager(并查集)

    t’s universally acknowledged that there’re innumerable trees in the campus of HUST.  Thus a professi ...

  2. mysql 存储引擎介绍

    一  存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念,后面我们还会说,但是现在要确定这一点. 在讲清楚什么是存储引擎之前,我们先来个比喻, ...

  3. 在word2010中添加带滚动条的文本框

    由于文件内容过长,为了加强文章的可读性,可以添加一个带滚动条的文本框,既能使文章看起来干净整洁,同时也极大的提高了文章的可读性. 我这里对在word2010中文本框带滚动条作个介绍: 1. 打开wor ...

  4. (转)Caffe搭建:常见问题解决办法和ubuntu使用中遇到问题(持续更新)

    参考网址:http://www.cnblogs.com/empty16/p/4828476.html 严正声明: 在linux下面使用命令行操作时,一定要懂得命令行的意思,然后再执行,要不然在不知道接 ...

  5. thinkPHP5.0验证器自定义验证规则

    自定义验证规则 protected $rule = [ 'views' => 'require|number|checkviews:0',//checkviews为自定义验证规则,0是传过去的规 ...

  6. ubuntu replace system openjdk

    一些ubuntu自带jdk的.但是有时候会确实我们所要的文件.下面介绍如何replace jdk 1. 卸载现有jdk sudo apt-get purge openjdk-\* 2. 下载jdk. ...

  7. 前后端分离之JWT用户认证

    在前后端分离开发时为什么需要用户认证呢?原因是由于HTTP协定是不储存状态的(stateless),这意味着当我们透过帐号密码验证一个使用者时,当下一个request请求时它就把刚刚的资料忘了.于是我 ...

  8. RTT设备与驱动之I2C:

    I2C主从结构(可以有多个主机,但同一时间只能有一个):I2C有两种地址结构7位/10位 总线空闲时,SDA 和 SCL 都处于高电平状态. 开始信号: SCL 为高电平时,主机将 SDA 拉低 结束 ...

  9. 既然有了HBase,为什么还需要Kudu呢?

    不多说,直接上干货! 那既然有了HBase,为什么还需要Kudu呢? 简单的说,就是嫌弃HBase在OLAP(联机分析处理)场合,SQL/MR类的批量检索场景中,性能不够好.通常这种海量数据OLAP场 ...

  10. jq回到顶部效果分析

    在浏览网页时,超出屏幕高度就会出现提上点击回到顶部的图标,点击即可回到页面顶部. 用到的知识点如下: 1.首先控制图标的显示和隐藏,先要获取浏览器的高度. var wHeight = $(window ...