NOIP201307货车运输

 

试题描述
A 国有n座城市,编号从1到n,城市之间有m条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有q辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。
输入
第一行有两个用一个空格隔开的整数n,m,表示A国有n座城市和m条道路。接下来m行每行3个整数x、y、z,每两个整数之间用一个空格隔开,表示从x号城市到y号城市有一条限重为z的道路。注意:x不等于y,两座城市之间可能有多条道路。接下来一行有一个整数q,表示有q辆货车需要运货。接下来q行,每行两个整数x、y,之间用一个空格隔开,表示一辆货车需要从x城市运输货物到y城市,注意:x不等于y。
输出
共有q行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。如果货车不能到达目的地,输出-1。
输入示例
4 3
1 2 4
2 3 3
3 1 1
3
1 3
1 4
1 3
输出示例
3
-1
3
其他说明
数据范围:0<n<10,000,0<m<50,000,0<q<30,000,0≤z≤100,000。

这里用了某神犇论文中的解法。

首先做一遍最大生成树,那么问题转化成了树上路径查询最小值,我们考虑用按秩合并的并查集来做。

做最大生成树当合并节点(x,y)时,考虑将x的fa设为y,并记录v[x]=e[i].w。

那么询问时我们先判断两点是否在同一连通分量中,然后因为按秩合并的树高最多是logn的,暴力向上找并更新答案即可。

#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define rep(s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {int x=0,f=1;char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0';return x*f;
}
const int maxn=50010;
struct Edge {int u,v,w;bool operator < (const Edge& ths) const {return w>ths.w;}
}e[maxn];
int n,m,q,pa[maxn],rk[maxn],v[maxn];
int findset(int x) {return x==pa[x]?x:findset(pa[x]);}
int get(int x,int& d) {if(x==pa[x]) return x;d++;return get(pa[x],d);
}
int main() {n=read();m=read();rep(1,n) pa[i]=i;rep(1,m) e[i].u=read(),e[i].v=read(),e[i].w=read();sort(e+1,e+m+1);rep(1,m) {int x=findset(e[i].u),y=findset(e[i].v);if(x!=y) {if(rk[x]>rk[y]) swap(x,y);pa[x]=y;v[x]=e[i].w;if(rk[x]==rk[y]) rk[y]++;}}q=read();while(q--) {int d1=0,d2=0,ans=1e9;int x=read(),y=read();if(get(x,d1)==get(y,d2)) {if(d1<d2) swap(x,y),swap(d1,d2);rep(1,d1-d2) ans=min(ans,v[x]),x=pa[x];while(x!=y) {ans=min(ans,min(v[x],v[y]));x=pa[x];y=pa[y];}printf("%d\n",ans);}else puts("-1");}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/wzj-is-a-juruo/p/4624231.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

knime如何连接mysql_knime怎么连接MySQL?

首先判断一下网络是否通&#xff1a;如果在局域网相同网段内那网络是通的&#xff0c;不同网段间需要看是否有做隔离&#xff0c;如果没有隔离&#xff0c;那就也是通的。测试方法可以用telnet 数据库IP 数据库端口号的方式探测一下 例如 telnet 192.168. 1.124 3306创建用户&a…

Asp.net Vnext IValueProvider

概述 本文已经同步到《Asp.net Vnext 系列教程 》中] IValueProvider 根据ValueProvider获取数据&#xff0c;在对数据进行绑定 代码实现 private class CustomValueProvider : IValueProvider{//判断否具有指定的前缀public Task<bool> ContainsPrefixAsync(string pref…

ECNUOJ 2615 会议安排

会议安排 Time Limit:1000MS Memory Limit:65536KBTotal Submit:451 Accepted:102 Description 科研人员与相关领域的国内外同行进行适时的接触与充分的交流&#xff0c;对于促进提高他们的科研业务水平&#xff0c;并及时掌握科研动态是十分必要而且重要的。ECNU为了走在科技…

Kafka架构设计:分布式发布订阅消息系统

【http://www.oschina.net/translate/kafka-design】&#xff08;较长&#xff1a;很详细的讲解&#xff09; 【我们为什么要搭建该系统】用作LinkedIn的活动流&#xff08;activity stream&#xff09;和运营数据处理管道&#xff08;pipeline&#xff09;的基础。作为多种类型…

拼团php开发逻辑思维罗振宇_2019罗胖罗振宇跨年演讲手动整理稿,看了两遍

2019罗胖罗振宇跨年演讲看了两遍&#xff0c;手动整理文档1.岁月不饶人&#xff0c;我们也没饶了岁月2.你有你的计划&#xff0c;原来这个世界另有计划&#xff0c;既然这个世界另有计划&#xff0c;我们就得重做计划3.做事的人和不做事的人4.宏观是我们必须忍受的&#xff0c;…

URLConnection

转载&#xff08;http://www.cnblogs.com/shyang--TechBlogs/archive/2011/03/21/1990525.html&#xff09; 关于URLConnection&#xff0c;网上很多回答都是对API的翻译&#xff0c;很崩溃&#xff0c;我是看了很多之后&#xff0c;然后看API才发现的。此后我会吸取教训&#…

java文件拷贝_Java实现文件拷贝的4种方法

第一种方法:古老的方式public static long forJava(File f1,File f2) throws Exception{long timenew Date().getTime();int length2097152;FileInputStream innew FileInputStream(f1);FileOutputStream outnew FileOutputStream(f2);byte[] buffernew byte[length];while(tru…

今夜的硬件之旅

6脚继电器&#xff1a; 汇科继电器HK4100F-DC6V-SHG ①3A触点切换能力 ②具有一组常开&#xff0c;一组转换触点形式 ③超小型&#xff0c;标准印刷制版引出脚 ④有塑封型 Outline&#xff08;L*W*H&#xff09;外形尺寸&#xff1a;15.510.511.8 Contact Date触电形式&#…

mp3 pcm java_Java mp3文件转pcm文件

Java mp3文件转pcm文件package cn.zpy.util;import java.io.File;import java.io.IOException;import javax.sound.sampled.AudioFileFormat;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;imp…

有1~5000一组乱序数列,请使用伪代码对该数进行排列

先把1-5000组成一个数组 冒泡排序法 $arrarray(1,2,3,4,5,6,7,8,9.....5000); $totalcount($arr); For($i0;$i<$total;$i){ For($j0;$j<$total-1;$j){ If($arr[$j]>$arr[$j1]){ $tmp$arr[$i]; $arr[$j]$arr[$j1]; $arr[$j1]$tmp; } } } 快速排序法 $arrarray(1,2,3,4,…

java 类型转换方法_java数据类型转换的常见方法

public class Testfun {public static void main(String[] args) {// (一)跨Number父类的类型转换// 1、str转int > Integer.parseInt(s1)String s1 "19";int i2 Integer.parseInt(s1);// 数字str转化为对标的intSystem.out.println("i2" (i2));// 2…

json to java 在线_Json转Java对象 (全网最简版)

Json2Java(全网最简版)json字符串转Java对象,生成对应文件描述&特点简易的Json转Java工具,满足基本日常使用(特殊需求可自行增添,代码就一页)在网上找了好些个这类工具,不是只暴露iead插件就是复杂&没文档,于是自己写了个全网最简版Json2Javaonly one file用法public c…

Material design 色彩

八月已过去&#xff0c;九月刚来到~暑假已过去~九月上学季~~又迎来了一个桂花飘香的季节&#xff0c;你是否有了新的目标和计划~~所以在九月初始给大家带来一个全新的东西&#xff08;ps&#xff1a;对于我来说是全新的东西&#xff09;——Material Design~~九月让我们一起好好…

java logging api_Java Logging API - Tutorial

1.2. 创建一个logger包 java.util.logging提供了日志的功能&#xff0c;可以使用类似于下面的代码来创建一个logger&#xff1a;import java.util.logging.Logger;private final static Logger LOGGER Logger.getLogger(MyClass.class .getName());1.3. LevelLog的等级反映了问…

内存查看工具RAMMAP说明

参考 Technet Process Private: 分配给单一Process专用的内存 Mapped File: 用来储放档案内容快取(Cache)的内存空间 Shared Memory: 标注给多个Process共用的内存分页(Page&#xff0c;内存管理单位) Page Table: 用来描述虚拟内存位址的分页表(裡面是一笔一笔的PTE&…

php接口和java接口_java和php接口的区别是什么

java和php接口的区别是&#xff1a;1、php接口中的抽象方法只能是public的&#xff0c;默认也是public权限&#xff1b;2、java中私有方法使用private修饰&#xff0c;供接口中的默认方法或者静态方法调用。【相关学习推荐&#xff1a;php编程(视频)】php:规范&#xff1a;接口…

成都优步uber司机第四组奖励政策

万能的优步成都团队放出了优步司机第四组&#xff0c;一二三组奖励已经骤降&#xff0c;在月末放出第四组车主档&#xff0c;这是要让一切归于平静的节奏么&#xff01;&#xff01;&#xff01; 滴滴快车单单2.5倍&#xff0c;注册地址&#xff1a;http://www.udache.com/如何…

java hql多条件查询_使用hql语句怎样实现多条件查询

展开全部这里只写了DAO和业务62616964757a686964616fe59b9ee7ad9431333264623331逻辑组件、ACTION的具体实现类&#xff0c;PO和和接口自己应该会写吧&#xff0c;HQL采用的是结合SQL的那种写法&#xff0c;增删改查全在里面了&#xff0c;修改下马上就能跑了&#xff0c;不清楚…

BZOJ 1008 [HNOI2008]越狱

1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5166 Solved: 2242[Submit][Status][Discuss]Description 监狱有连续编号为1...N的N个房间&#xff0c;每个房间关押一个犯人&#xff0c;有M种宗教&#xff0c;每个犯人可能信仰其中一种。如果相邻房间…

android mysql开发工具_Android开发工具--adb的使用

adb(Android Debug Bridge)是Android提供的一个通用的调试工具&#xff0c;借助这个工具&#xff0c;我们可以管理设备或手机模拟器的状态。还可以进行以下的操作&#xff1a;1、快速更新设备或手机模拟器中的代码&#xff0c;如应用或Android系统升级&#xff1b;2、在设备上运…