【NOIP2013】货车运输

Description

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

Input

第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道路。 
接下来 m 行每行 3 个整数 x、y、z,每两个整数之间用一个空格隔开,表示从 x 号城市到 y 号城市有一条限重为 z 的道路。注意:x 不等于 y,两座城市之间可能有多条道路。 
接下来一行有一个整数 q,表示有 q 辆货车需要运货。 
接下来 q 行,每行两个整数 x、y,之间用一个空格隔开,表示一辆货车需要从 x 城市运输货物到 y 城市,注意:x 不等于 y。

Output

输出共有 q 行,每行一个整数,表示对于每一辆货车,它的最大载重是多少。如果货车不能到达目的地,输出-1。

Sample Input

4 3 
1 2 4 
2 3 3 
3 1 1 

1 3 
1 4 
1 3

Sample Output


-1 
3

Hint

对于 30%的数据,0 < n <1,000,0 < m < 10,000,0 < q < 1,000;

对于 100%的数据,0 < n < 10,000,0 < m < 50,000,0 < q < 30,000,0 ≤ z ≤ 100,000。

题解:
这个题目是找每条路径上的最大边权的最小最大值,首先要知道结论,图中任意两点路径的最大最小值一定是在这个图的最大生成树上,因为我们做克鲁斯卡尔的时候,是将边从大到到小排序,然后一颗生成树包含了图中任意节点并且因为是从大到小,所以所以的边都尽量选最大的,那么限制条件——那个最小值一定在树上,所以把树扣出来,用倍增或者是树链剖分维护一下就可以了。主要对森林的处理,用并查集维护同时向一个联通块连一条-1的边。
代码:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<cstring>
const int MAXN=200300;
using namespace std;
int n,m,q,num=0,faa[MAXN];
struct edge1{int from,to,quan;void read(){scanf("%d%d%d",&from,&to,&quan);}
}e[MAXN*2];
struct edge3{int from,to,quan;
}h[MAXN*2];
struct edge{int to,quan,first,next;
}a[MAXN*2];
int son[MAXN],size[MAXN],deep[MAXN],fa[MAXN];
int top[MAXN],id[MAXN],w[MAXN],numm;
struct tree{int l,r,minn;
}tr[MAXN*4];void cl(){for(int i=1;i<=MAXN*4-1;i++) tr[i].minn=1<<30;memset(fa,0,sizeof(fa));memset(son,0,sizeof(son));memset(size,0,sizeof(size));memset(deep,0,sizeof(deep));memset(top,0,sizeof(top));memset(id,0,sizeof(id));memset(w,0,sizeof(w));
}bool comp(edge1 x,edge1 y){if(x.quan>y.quan) return 1;return 0;
}void addedge(int from,int to,int quan){a[++num].to=to;a[num].quan=quan;a[num].next=a[from].first;a[from].first=num;
}int find(int now){if(now!=faa[now]) faa[now]=find(faa[now]);return faa[now];
}void hebin(int x,int y){int hh=find(x),hhh=find(y);faa[hh]=hhh;
}void Mtree(){for(int i=1;i<=m;i++) e[i].read();for(int i=1;i<=n;i++) faa[i]=i;for(int i=1;i<=m;i++){int x=e[i].from,y=e[i].to;if(find(x)!=find(y)){hebin(x,y);}}for(int i=2;i<=n;i++){if(find(1)!=find(i)){int hh=find(1),yy=find(i);e[++m].from=hh,e[m].to=yy,e[m].quan=-1;hebin(hh,yy);}}sort(e+1,e+m+1,comp);for(int i=1;i<=n;i++) faa[i]=i;numm=0;for(int i=1;i<=m;i++){int x=e[i].from,y=e[i].to,z=e[i].quan;int xx=find(x);int yy=find(y);if(xx!=yy){numm++;hebin(x,y);addedge(x,y,z),addedge(y,x,z);h[numm].from=x,h[numm].to=y,h[numm].quan=z;}if(numm==n-1) break;}
}void dfs1(int now,int f){fa[now]=f;size[now]=1;deep[now]=deep[f]+1;for(int i=a[now].first;i;i=a[i].next){int to=a[i].to;if(to==f) continue;dfs1(to,now);size[now]+=size[to];if(size[son[now]]<size[to]) son[now]=to;}
}void dfs2(int now,int rf){top[now]=rf;id[now]=++num;if(son[now]) dfs2(son[now],rf);for(int i=a[now].first;i;i=a[i].next){int to=a[i].to;if(to==fa[now]||to==son[now]) continue;dfs2(to,to);}
}void build(int xv,int l,int r){if(l==r){tr[xv].l=l,tr[xv].r=r;if(l==1) return;tr[xv].minn=w[l];return;}tr[xv].l=l,tr[xv].r=r;int mid=(l+r)/2;build(xv*2,l,mid);build(xv*2+1,mid+1,r);tr[xv].minn=min(tr[xv*2].minn,tr[xv*2+1].minn);
}int kanxun(int xv,int l,int r){int L=tr[xv].l,R=tr[xv].r,mid=(L+R)/2;if(l==L&&r==R){return tr[xv].minn;}if(r<=mid) return kanxun(xv*2,l,r);else if(l>mid) return kanxun(xv*2+1,l,r);else return min(kanxun(xv*2,l,mid),kanxun(xv*2+1,mid+1,r));
}int getmin(int x,int y){int topx=top[x],topy=top[y],minn=1<<30;while(topx!=topy){if(deep[topx]<deep[topy]) swap(x,y),swap(topx,topy);minn=min(kanxun(1,id[topx],id[x]),minn);x=fa[topx],topx=top[x];}if(x==y) return minn;if(deep[x]<deep[y]) swap(x,y);minn=min(minn,kanxun(1,id[son[y]],id[x]));return minn;
}int main(){cl();scanf("%d%d",&n,&m);Mtree();memset(fa,0,sizeof(fa));dfs1(1,0);num=0;dfs2(1,1);for(int i=1;i<=numm;i++){if(deep[h[i].from]>deep[h[i].to]) swap(h[i].from,h[i].to);int to=h[i].to,quan=h[i].quan;w[id[to]]=quan;}build(1,1,num);scanf("%d",&q);for(int i=1;i<=q;i++){int x,y;scanf("%d%d",&x,&y);printf("%d\n",getmin(x,y));}
}

 

转载于:https://www.cnblogs.com/renjianshige/p/7231849.html

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

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

相关文章

杀死应用进程 android,如何杀死Android应用程序启动的logcat进程?

我有Android应用程序,在Service启动实现后面跟着代码&#xff1a;...Process process Runtime.getRuntime().exec("logcat -v time -s " arg);BufferedReader bufferedReader new BufferedReader(new InputStreamReader(process.getInputStream()));...如您所见,我…

Android笔记(六十七) 自定义控件

实际编程中&#xff0c;系统提供的控件往往无法满足我们的需求&#xff0c;一来是样子丑陋&#xff0c;二来是一些复杂的组合需要多次使用的话&#xff0c;每次都写一堆控件的组合会很耗费时间&#xff0c;所以我们将这些组件的组合自定义为一个新的控件&#xff0c;以后使用的…

android 7.0原生room,小米5S 安卓9.0 原生体验 LineageOS16.0 ROOT

介绍ROM为第三方编译安卓9.0 LineageOS16.0 &#xff0c;基本功能正常&#xff0c;如有其他bug&#xff0c;理性对待使用Magisk ROOT授权刷机完成后请务必到设置中手动设置当前系统时间和时区去网络图标上面的感叹号和x号方法&#xff1a;打开CaptiveMgr软件--自动弹出授权弹窗…

图---互斥集

互斥集主要用于Kruskal算法中&#xff0c;用于求图的最小生成树。 互斥集主要有3个基本操作&#xff1a; 1. 初始化各个集合 Make(a)p[a] ← a 2. 查找各个集合的老祖宗 Find(a)if a p[a] : return aelse : return Find(p[a]) 3. 合并两个集合 Union(a, b)p[Find(b)]…

Oracle配置监听要注意的地方

昨天心血来潮&#xff0c;把Oracle的监听都删了&#xff0c;准备重新配一遍&#xff0c;结果弄了一天才配好&#xff0c;不过对Oracle的了解更深了一些。 对昨天的问题做一个总结&#xff1a; 1、直接在NetManager中删掉监听时&#xff0c;实际的监听服务好像并没有完全删除&am…

signature=486e34400687432217e65e837b8e6753,PXE常见错误代码表

在我们日常做无盘时&#xff0c;通常都会遇到一些这样或那样的问题&#xff0c;不过好在一般这些错误都会有些错误代码&#xff0c;我们可以通过错误代码查询到一些有帮助的信息。下面是我转载的一些PXE驱动错误代码表&#xff0c;遇到PXE错误时&#xff0c;可查询下看看&#…

12月25号 Category类别

Category类别 1.在已有类的基础上进行扩展&#xff0c;无需像继承一样子类化&#xff0c;就可以直接添加一些方法 2.继承不仅可以添加方法还可以添加属性&#xff0c;类别只能添加方法 3.类别不会改变现有类的方法&#xff0c;万一重写&#xff0c;自己写的优先级高 4.把类别中…

17---Net基础加强

更新中&#xff0c;敬请期待。。。。。。。。。。。。 复习 将xml显示到treeview 修改增加 删除 foreach原理 深拷贝与浅拷贝 模拟数据库及登陆 复习总结转载于:https://www.cnblogs.com/yechangzhong-826217795/p/4157562.html

Linux系统rootpassword改动

重新启动系统。 进入系统引导界面&#xff1a; 按下e键&#xff1a; 选择第二项。内核启动參数设置&#xff0c;按下e键&#xff1a; 在结尾处&#xff0c;输入数字 1或者 英文 " single"&#xff0c;再回车&#xff1a; 按下b键启动。此时以单用户模式级别引导启动程…

关于OC-省市区习题

对于省市区的问题&#xff0c;关键在于搞清楚数组嵌套字典&#xff0c;字典里面装数组的多重嵌套关系&#xff0c;沉下心来&#xff0c;捋清楚思路&#xff0c; 实在看不懂就多打几遍&#xff0c;这道题理解了&#xff0c;熟练了对之后学习很有好处。 代码如下&#xff1a; NSS…

23种设计模式----------代理模式(一)

代理模式也叫委托模式。 代理模式定义&#xff1a;对其他对象提供一种代理从而控制对这个对象的访问。就是&#xff0c;代理类 代理 被代理类&#xff0c;来执行被代理类里的方法。 一般情况下&#xff0c;代理模式化有三个角色。 1&#xff0c;抽象的主题类(或者接口) IGamePl…

(转) Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

http://blog.csdn.net/u010648555/article/details/60767633 当任何时候觉你得难受了&#xff0c;其实你的大脑是在进化&#xff0c;当任何时候你觉得轻松&#xff0c;其实都在使用以前的坏习惯。 通过前面的学习&#xff0c;你可能大致了解了Quartz&#xff0c;本篇博文为你打…

被流氓360设置浏览器主页的解决办法(如果你也遇到了跟我一样的问题,不妨看一下是不是这个原因)...

最近电脑罢工&#xff0c;重装了系统&#xff1b;很多常用软件都不得不重新安装&#xff0c;其实这都不是事儿&#xff0c;现在基本上都是百兆光纤了&#xff0c;下载安装都很顺溜。 浏览器也在安装之列&#xff0c;因为搞开发所以谷歌火狐浏览器都是必装的&#xff1b;平时基本…

BZOJ1834 [ZJOI2010]network 网络扩容

网络流训练好题。。。但是要给差评&#xff01;蒟蒻表示这就是板子题&#xff0c;然后做了半个小时T T 先跑一边最大流&#xff0c;得到第一问答案ans。 第二问&#xff1a;原先的边不动&#xff0c;费用为0。 然后对每条边在上面再加一条边&#xff0c;流量为inf&#xff0c;费…

android 更新平台,Android更新平台架构方案

这篇文章是去年写的&#xff0c;我们的两款app一直这使用umeng的更新服务&#xff0c;但是16年umeng开始放弃更新服务&#xff0c;考虑到切换到其他更新平台也会面临这样的问题&#xff0c;我开始着手自己搭建一个更新平台。整体方案包含前后端&#xff0c;客户端代码封装成jar…

setSignVisible的修改

store传入accountReducer 1.从cookie中获取id,avatar,nickname.2.createStore(reducer, initState)传入reducer,可以在页面中state.accountReducer.current_account获取 const middleware routerMiddleware(browserHistory); let initState {};if(Cookie.hasItem("id&qu…

DGbroker故障切换示例

1.主库故障 SQL> startup ORACLE instance started.Total System Global Area 1068937216 bytes Fixed Size 2260088 bytes Variable Size 910164872 bytes Database Buffers 150994944 bytes Redo Buffers 5517312 bytes ORA-00205: e…

html 自动触发 事件,js自动触发事件自定义事件

在有些情况下&#xff0c;我们需要程序逻辑自动触发元素的事件&#xff0c;例如js提供了click()&#xff0c; form提供了reset(),submit()等方法&#xff01;在jquery中提供了trigger()方法帮助我们自动触发事件&#xff0c;原理是什么呢&#xff1f;接下来让我们一探究竟&…

Storm编程入门API系列之Storm的可靠性的ACK消息确认机制

概念&#xff0c;见博客 Storm概念学习系列之storm的可靠性 什么业务场景需要storm可靠性的ACK确认机制&#xff1f; 答&#xff1a;想要保住数据不丢&#xff0c;或者保住数据总是被处理。即若没被处理的&#xff0c;得让我们知道。 public void nextTuple() {num;System.out.…

关于 php mysql pdo cannot find driver 解决方案

1、下载 文件 或者 进入 在PHP源码包中进入ext/pdo_mysql http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 2、解压文件tar zxvf PDO_MYSQL-1.0.2.tgz 3、配置和编译文件cd PDO_MYSQL-1.0.2/usr/local/php/bin/phpize./configure –with-php-config/usr/local/php/bin/php-config…