#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=;
int n,m;
int x,y,z;
struct node
{
int u,v,w,next;
}edge[MAXN],a[MAXN];
int num=;
int head[MAXN];
int f[MAXN];
int anum=;
int ahead[MAXN];
int deep[MAXN];
int s[MAXN][];
int take[MAXN][];
void edge_add(int x,int y,int z)
{
edge[num].u=x;
edge[num].v=y;
edge[num].w=z;
edge[num].next=head[x];
head[x]=num++;
}
void a_add(int i)
{
a[anum].u=edge[i].u;
a[anum].v=edge[i].v;
a[anum].w=edge[i].w;
a[anum].next=ahead[a[anum].u];
ahead[a[anum].u]=anum++;
}
int comp(const node & a ,const node & b)
{return a.w>b.w;} int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
void unionn(int x,int y)
{
int fx=find(x);
int fy=find(y);
f[fx]=fy;
}
void Biggest_Kruskal()
{
sort(edge+,edge+num,comp);
int k=;
for(int i=;i<num;i++)
{
int uu=edge[i].u;
int vv=edge[i].v;
if(find(uu)!=find(vv))
{
unionn(uu,vv);
a_add(i);
k++;
}
if(k==n-)break;
}
for(int i=;i<=anum;i++)
cout<<a[i].u<<" "<<a[i].v<<" "<<a[i].w<<" "<<a[i].next<<endl;
}
void Build_Tree(int p)
{
for(int i=ahead[p];i!=-;i=a[i].next)
{
int will=a[i].v;
if(deep[will]==)
{
deep[will]=deep[p]+;
s[will][]=p;
take[will][]=a[i].w;
Build_Tree(will);
}
}
}
void Initialize_Step()
{
for(int i=;i<=;i++)
{
for(int j=;j<=n;j++)
{
s[j][i]=s[s[j][i-]][i-];
take[j][i]=min(take[j][i-],take[s[j][i-]][i-]);
}
}
}
int LCA(int x,int y)
{
int ans=0x7ff;
if(deep[x]<deep[y])
swap(x,y);
for(int i=;i>=;i--)
{
if(deep[s[x][i]]>=deep[y])
x=s[x][i];
}
if(x==y)
return x;
for(int i=;i>=;i--)
{
if(s[x][i]!=s[y][i])
{
x=s[x][i];
y=s[y][i];
ans=min(ans,take[x][i]);
ans=min(ans,take[y][i]);
}
}
ans=min(ans,take[x][]);
ans=min(ans,take[y][]);
return ans;
}
int main()
{
scanf("%d%d",&n,&m); for(int i=;i<=n;i++)
{head[i]=-;f[i]=i;ahead[i]=-;} for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
edge_add(x,y,z);
//edge_add(y,x,z);
}
Biggest_Kruskal();
deep[]=;
for(int i=;i<=n;i++)
Build_Tree(i);
Initialize_Step();
int q;
scanf("%d",&q);
for(int i=;i<=q;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(find(x)!=find(y))
{
printf("-1\n");
continue;
}
printf("%d\n",LCA(x,y));
}
return ;
}

P1967 货车运输 未完成的更多相关文章

  1. 洛谷 P1967 货车运输

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

  2. P1967 货车运输

    P1967 货车运输最大生成树+lca+并查集 #include<iostream> #include<cstdio> #include<queue> #inclu ...

  3. 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增

    倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...

  4. Luogu P1967 货车运输(Kruskal重构树)

    P1967 货车运输 题面 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 \ ...

  5. 【杂题总汇】NOIP2013(洛谷P1967) 货车运输

    [洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...

  6. P1967 货车运输(倍增LCA,生成树)

    题目链接: https://www.luogu.org/problemnew/show/P1967 题目描述 A国有n座城市,编号从 1到n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制, ...

  7. 洛谷 P1967 货车运输 Label: 倍增LCA && 最小瓶颈路

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

  8. 洛谷 P1967 货车运输(克鲁斯卡尔重构树)

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

  9. P1967 货车运输 树链剖分

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

随机推荐

  1. SpringBoot发送简单文本邮件

    1.pom.xml添加 spring-boot-starter-mail 依赖 <dependency> <groupId>org.springframework.boot&l ...

  2. MYSQL初级学习笔记二:数据表相关操作及MySQL存储引擎!(视频序号:初级_5,7-22|6)

    知识点三:数据表相关操作(5,7-22) --------------------------------整型--------------------------------- --测试整型 CREA ...

  3. codeforces 437B. The Child and Set 解题报告

    题目链接:http://codeforces.com/contest/437/problem/B 题目意思:给出两个整数 sum 和 limit,问能否从1 - limit 这些数中选出一些数(注意: ...

  4. Excel: 应用Match/Vlookup比较Excel两列的不同数据

    假设Excel中有两列,现在要比较两列数据的不同.

  5. 微信小程序服务类目大坑:特殊行业服务类目所需资质材料

    作为一个技术开发人员,遇到特殊行业服务类目所需资质材料,只能叫苦连天了,妈的,这个不是技术可以解决的问题,如果技术可以解决的问题都不是问题. 百牛信息技术bainiu.ltd整理发布于博客园 特殊行业 ...

  6. vue 使用font-awesome 只需两步

    npm 安装font-awesome 以及需要的所有依赖 cnpm install less less-loader css-loader style-loader file-loader font- ...

  7. linux设备驱动第三篇:如何实现一个简单的字符设备驱动

    在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存 ...

  8. Collection View Programming Guide for iOS---(七)---Custom Layouts: A Worked Example

    Custom Layouts: A Worked Example Creating a custom collection view layout is simple with straightfor ...

  9. 求一元二次方程的根【double型的0输出%.2lf为-0.00】

    #include <bits/stdc++.h> using namespace std; #define LL long long #define eps 1e-6 int main() ...

  10. 关于js变量作用域

    先来看一段代码 var ss=1;function sss(){ alert(ss);}$(document).ready(function(){ var ss=2; alert(ss); sss() ...