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

【题目描述】

【来源】

CCF全国信息学奥林匹克联赛(NOIP2013)复赛Day1

最大生成树+LCA

屠龙宝刀点击就送

#include <algorithm>
#include <ctype.h>
#include <cstdio>
#define N 20005
#define M 50005
using namespace std;
void read(int &x)
{
x=;char ch;
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
}
struct E
{
int x,y,z;
bool operator<(E a)const
{
return z>a.z;
}
}e[M<<];
struct Edge
{
int next,to,dis;
Edge (int next=,int to=,int dis=) :next(next),to(to),dis(dis) {}
}edge[M<<];
bool vis[N];
int dep[N],pre[N],val[N],fa[N],dis[N],q,head[M],cnt,n,m;
int find_(int x)
{
return fa[x]==x?x:fa[x]=find_(fa[x]);
}
void insert(int u,int v,int w)
{
edge[++cnt]=Edge(head[u],v,w);
head[u]=cnt;
}
int min(int a,int b) {return a>b?b:a;}
void dfs(int x)
{
vis[x]=true;
for(int u=head[x];u;u=edge[u].next)
{
int v=edge[u].to;
if(!vis[v])
{
pre[v]=x;
val[v]=edge[u].dis;
dep[v]=dep[x]+;
dfs(v);
}
}
}
void swap(int &a,int &b)
{
int tmp=b;
b=a;
a=tmp;
}
int getans(int a,int b)
{
int min1=0x7fffffff,min2=0x7fffffff;
if(dep[a]<dep[b]) swap(a,b);
while(dep[a]>dep[b])
{
min1=min(min1,val[a]);
a=pre[a];
}
while(a!=b)
{
min1=min(min1,val[a]);
a=pre[a];
min2=min(min2,val[b]);
b=pre[b];
}
return min(min1,min2);
}
int main()
{
freopen("truck.in","r",stdin);
freopen("truck.out","w",stdout);
read(n);
read(m);
for(int x,y,z,i=;i<=m;i++)
{
read(e[i].x);
read(e[i].y);
read(e[i].z);
}
for(int i=;i<=n;i++) fa[i]=i;
sort(e+,e++m);
int num=;
for(int i=;i<=m;i++)
{
int fx=find_(e[i].x),fy=find_(e[i].y);
if(fx!=fy)
{
num++;
fa[fy]=fx;
insert(e[i].x,e[i].y,e[i].z);
insert(e[i].y,e[i].x,e[i].z);
if(num==n-) break;
}
}
for(int i=;i<=n;i++) if(!vis[i]) dfs(i);
read(q);
for(int x,y;q--;)
{
read(x);
read(y);
int fx=find_(x),fy=find_(y);
if(fx!=fy) printf("-1\n");
else printf("%d\n",getans(x,y));
}
return ;
}

COGS 1439. [NOIP2013]货车运输的更多相关文章

  1. 洛谷—— P1967 货车运输 || COGS——C 1439. [NOIP2013]货车运输

    https://www.luogu.org/problem/show?pid=1967#sub  ||  http://www.cogs.pro/cogs/problem/problem.php?pi ...

  2. [Luogu 1967] NOIP2013 货车运输

    [Luogu 1967] NOIP2013 货车运输 一年多前令我十分头大的老题终于可以随手切掉了- 然而我这码风又变毒瘤了,我也很绝望. 看着一年前不带类不加空格不空行的清纯码风啊,时光也好像回去了 ...

  3. NOIP2013 货车运输(最大生成树,倍增)

    NOIP2013 货车运输(最大生成树,倍增) A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道 ...

  4. NOIP2013 货车运输 (最大生成树+树上倍增LCA)

    死磕一道题,中间发现倍增还是掌握的不熟 ,而且深刻理解:SB错误毁一生,憋了近2个小时才调对,不过还好一遍AC省了更多的事,不然我一定会疯掉的... 3287 货车运输 2013年NOIP全国联赛提高 ...

  5. NOIP2013 货车运输

    3.货车运输 (truck.cpp/c/pas) [问题描述] A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货 ...

  6. Codevs3278[NOIP2013]货车运输

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond      题目描述 Description A 国有 ...

  7. 【洛谷P1967】[NOIP2013]货车运输

    货车运输 题目链接 显然,从一点走到另一点的路径中,最小值最大的路径一定在它的最大生成树上 所以要先求出最大生成树,再在生成树上找最近公共祖先,同时求出最小值. #include<iostrea ...

  8. noip2013货车运输

    P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过 ...

  9. NOIP2013货车运输[lca&&kruskal]

    题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...

随机推荐

  1. codeforces 669D D. Little Artem and Dance(乱搞题)

    题目链接: D. Little Artem and Dance time limit per test 2 seconds memory limit per test 256 megabytes in ...

  2. python中optparse模块用法

    optparse模块主要用来为脚本传递命令参数,采用预先定义好的选项来解析命令行参数. 首先需要引入optparser模块,然后执行初始化,实例化一个OptionParser对象(可以带参,也可以不带 ...

  3. [Selenium] common functions comparison

    1.Wait for element  in default time or self defined time When the element need some time to be prese ...

  4. 状态保存机制之ViewState概述及应用

    状态保存机制之ViewState概述及应用 作者: 字体:[增加 减小] 类型:转载   无状态的根本原因是:浏览器和服务器使用Socket通信,服务器将请求结果返回给浏览器后,会关闭当前Socket ...

  5. 压缩&&解压

    压缩与解压缩: ############################################################# tar xvf wordpress.tar       ## ...

  6. Windows下如何生成数字证书

    1.Makecert.exe<证书创建工具>使用说明:http://msdn.microsoft.com/zh-cn/library/bfsktky3.aspx 2.SignTool.ex ...

  7. 从零开始构建一个Reactor模式的网络库(二)线程类Thread

    线程类Thread是对POSIX线程的封装类,因为要构建的是一个Linux环境下的多线程网络库,对线程的封装是很必要的. 首先是CurrentThread命名空间,主要是获取以及缓存线程id: #if ...

  8. python学习笔记3-循环1

    1 while break continue #while语句 ''' while 判断条件: 执行语句…… ''' count = 0 while (count < 9): print ('T ...

  9. 土法搞docker系列之自制docker的graph driver vdisk

    写在最前 偶然整理,翻出来14年刚开始学docker的时候的好多资料.当时docker刚刚进入国内,还有很多的问题.当时我们的思考方式很简单,docker确实是个好的工具,虽然还不成熟.但是不能因为短 ...

  10. bzoj 1076: [SCOI2008]奖励关【状压dp+概率dp】

    设f[i][s]为前i步,选的礼物集合为s的方案数,然而并不会转移-- 看了hzwer的blog,发现要倒着转移,然后答案就是f[1][0] 妙啊 #include<iostream> # ...