NOIP 货车运输

题目描述 Description

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

输入描述 Input Description

第一行有两个用一个空格隔开的整数 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 Description

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

样例输入 Sample Input

4 3
1 2 4
2 3 3
3 1 1
3
1 3
1 4
1 3

样例输出 Sample Output

3
-1
3

数据范围及提示 Data Size & Hint

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

 题解

最大生成树+LCA

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstdlib>
  4 #include<cmath>
  5 #include<algorithm>
  6 #include<cstring>
  7 #include<vector>
  8 #include<queue>
  9 using namespace std;
 10 const int maxn=10005;
 11 const int maxm=50005;
 12 int N,M,Q;
 13 vector<int> to[maxn],cost[maxn];
 14 int p[maxn][50],next[maxn][50];
 15 int dep[maxn];
 16 int fa[maxn];
 17 struct node{
 18     int uu,vv,cc;
 19 }a[maxm];
 20 int cmp(const node&q,const node&w){
 21     if(q.cc>w.cc) return 1;
 22     return 0;
 23 }
 24 inline int get_fa(int x){
 25     if(x!=fa[x]) fa[x]=get_fa(fa[x]);
 26     return fa[x];
 27 }
 28 inline void dfs(int x){
 29     for(int i=0;i<to[x].size();i++){
 30         int y=to[x][i];
 31         if(y!=p[x][0]){
 32             dep[y]=dep[x]+1;
 33             p[y][0]=x;
 34             next[y][0]=cost[x][i];
 35             for(int k=1;k<=30;k++){
 36                 int zu=1<<k;
 37                 if(zu<=dep[y]){
 38                     p[y][k]=p[p[y][k-1]][k-1];
 39                     next[y][k]=min(next[y][k-1],next[p[y][k-1]][k-1]);
 40                 }
 41                 else break;
 42             }        
 43             dfs(y);
 44         }
 45     }
 46 }
 47 inline int LCA(int x,int y){
 48     int ANS=1e9;
 49     if(dep[x]>dep[y]) swap(x,y);
 50     int delta=dep[y]-dep[x];
 51     for(int i=0;i<=30;i++){
 52         int h=1<<i; h=h&delta;//这步很关键,如果直接用 if((1<<i)&delta!=0) 会出错 
 53         if(h!=0){
 54             ANS=min(ANS,next[y][i]);
 55             y=p[y][i];
 56         }
 57     }
 58     if(x==y) return ANS;
 59     for(int i=30;i>=0;i--){
 60         if(p[x][i]!=p[y][i]){
 61             ANS=min(ANS,next[x][i]); ANS=min(ANS,next[y][i]);
 62             x=p[x][i]; y=p[y][i];
 63         }
 64     }
 65     ANS=min(ANS,next[y][0]); ANS=min(ANS,next[x][0]);
 66     return ANS;
 67 }
 68 int main(){
 69 //    freopen("truck.in","r",stdin);
 70 //    freopen("truck.out","w",stdout);
 71     scanf("%d%d",&N,&M);
 72     for(int i=1;i<=N;i++) fa[i]=i;
 73     for(int i=1;i<=M;i++){
 74         int u,v,c;
 75         scanf("%d%d%d",&u,&v,&c);
 76         a[i].uu=u; a[i].vv=v; a[i].cc=c;
 77     }
 78     sort(a+1,a+M+1,cmp);
 79     for(int i=1;i<=M;i++){
 80         int u=a[i].uu; int v=a[i].vv; int c=a[i].cc;
 81         int fau=get_fa(u); int fav=get_fa(v);
 82         if(fau!=fav){
 83             if(fau<fav) fa[fav]=fau;
 84             else fa[fau]=fav;
 85             to[u].push_back(v); to[v].push_back(u);
 86             cost[u].push_back(c); cost[v].push_back(c);
 87         }
 88     }
 89     p[1][0]=-1; dep[1]=0;
 90     dfs(1);
 91     scanf("%d",&Q);
 92     for(int i=1;i<=Q;i++){
 93         int u,v;
 94         scanf("%d%d",&u,&v);
 95         int now=LCA(u,v);
 96         if(now==0) now=-1;
 97         cout<<now<<endl;
 98     }
 99     return 0;
100 }

 

转载于:https://www.cnblogs.com/CXCXCXC/p/4938461.html

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

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

相关文章

那是计算机房吗英语否定回答,【微课+教材+听力+知识点】PEP四年级英语下册 Unit 1...

原标题&#xff1a;【微课教材听力知识点】PEP四年级英语下册 Unit 1微课&#xff1a;Unit 1-PartA微课&#xff1a;Unit 1-PartB微课&#xff1a;Unit 1-PartC课文教材动画教材听力Unit 1 My schoolUnit 1 单词▲点右上方绿标即可收听Words in Unit 1first floor [ˌfɜːst ˈ…

django html显示xml,如何将HTML与Django集成?

Django可能会为此而大肆渲染。如果您想要的只是一种将表单链接到某些后端Python代码的方法&#xff0c;那么像Flask这样的微框架可能是更好的选择。下面是你如何用烧瓶做一个简单的表格&#xff1a;创建一个目录project&#xff0c;其中有一个目录templates你的模板很简单&…

PropertyGrid控件 分类(Category)及属性(Property)排序

最近在做表单设计器&#xff0c;设计器上的控件都是我们自己封装的&#xff0c;但每个属性类别里的属性是按照属性的拼音排序的&#xff0c;现在想按照PropertyIndex标识进行排序&#xff08;PropertyIndex的后三位是用来标识编辑器的&#xff09;。 具体实现如下&#xff1a; …

css3标签

-moz代表firefox浏览器私有属性 -ms代表ie浏览器私有属性 -webkit代表chrome、safari私有属性 -o代表opera私有属性 border-radius:2em; 向div元素添加圆角边框&#xff0c;这是一种缩小写法&#xff0c;等价于: border-top-left-radius:2em; border-top-right-radius:2em; bor…

用计算机计算出密码,自带计算器的密码

手机、电脑都会有自带的计算器&#xff0c;用惯了简易的计算器功能&#xff0c;不知道有没有感觉 iPhone 自带的计算器难用&#xff1f;后来才发现原来它还可以使用科学计算器进行指数函数、对数函数和三角函数的计算。只需要将 iPhone 转到横排模式就可以&#xff1a;这算不算…

PHP内核探索之变量(6)- 后续内核探索系列大纲备忘

年前因为工作比较饱和&#xff0c;现在又忙着换工作的事情&#xff0c;基本停止了对博文的更新。后续的博文&#xff0c;还是慢慢补上吧。 为了不至于过于发散&#xff0c;先搞个未成形的大纲&#xff0c;如下&#xff1a; PHP内核探索之变量 不平凡的字符串  PHP内核探索之…

ios 开发日记 21 -自动处理键盘事件的第三方库:IQKeyboardManager

我们写界面要考虑很多用户体验问题&#xff0c;键盘事件的响应就是比较麻烦的一种。我们需要监听键盘事件&#xff0c;考虑点击背景收起键盘、考虑键盘遮挡输入框问题等等&#xff0c;而且每个界面都要做这么一套。这个库帮我们解决了这个事情。 这个库的下载地址&#xff1a;h…

shopify在哪里填写html,[Shopify开店教程]添加嵌入代码

添加嵌入代码在Shopify管理员中创建购买按钮后&#xff0c;您就可以将其添加到您自己的网站或博客中。将嵌入代码添加到您网站的源HTML的过程有所不同&#xff0c;具体取决于您希望购买按钮和购物车在您的发布平台上显示的方式和位置&#xff0c;以及有时您在该平台上使用的主题…

activity生命周期图

转载于:https://www.cnblogs.com/aqianglala/p/4344431.html

华硕台式计算机光盘怎么启动不了,华硕笔记本怎么用光盘重装系统 笔记本重装系统失败怎么办...

华硕笔记本是现在非常热门的笔记本品牌&#xff0c;很多的华硕笔记本用户在重装系统的时候&#xff0c;大多数会用上光盘&#xff0c;这种重装方式较为简单&#xff0c;所以备受青眯&#xff0c;不过呢还是有很多电脑用户不知道怎么用光盘重装系统&#xff0c;没关系&#xff0…

怎么安装Win10,硬盘安装Win10系统图文教程

2019独角兽企业重金招聘Python工程师标准>>> http://jingyan.baidu.com/article/f25ef254613ffd482c1b8236.html 分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友…

iOS高级必备

1.你使用过Objective-C的运行时编程&#xff08;Runtime Programming&#xff09;么&#xff1f;如果使用过&#xff0c;你用它做了什么&#xff1f;你还能记得你所使用的相关的头文件或者某些方法的名称吗&#xff1f; Objecitve-C的重要特性是Runtime&#xff08;运行时&…

游戏计算机重要参数,这真的很重要吗 游戏鼠标三大参数之谜

1游戏鼠标三大参数&#xff1a;采样率[中关村在线键鼠频道原创]游戏鼠标作为目前最受消费者关注的外设产品&#xff0c;其销量以及利润在市场上也是表现最为出色的&#xff0c;众多游戏外设厂商也推出各种各样的游戏鼠标&#xff0c;各种霸气的名字更是让我们看的眼花缭乱&…

[Android]Activity启动过程

Android系统启动加载流程&#xff1a; 参考图 Linux内核加载完毕启动init进程init进程fork出zygote进程zygote进程在ZygoteInit.main()中进行初始化的时候fork出SystemServer进程SystemServer进程开启的时候初始化ActivityThread和ActivityManagerService&#xff08;其它还有P…

CentOS 7 中firewall-cmd命令

在 CentOS 7 暂时开放 ftp 服务# firewall-cmd --add-serviceftp永久开放 ftp 服务# firewall-cmd --add-serviceftp --permanent永久关闭# firewall-cmd --remove-serviceftp --permanentsuccess让设定生效# systemctl restart firewalld检查设定是否生效# iptables -L -n | g…

计算机网络又称国际互联网,Internet属于( )。 A.国际互联网B.内部网C.局域网D.电话网 - 作业在线问答...

相关题目与解析Internet属于()。A.内部网B.局域网C.公用电话网D.国际互联网Internet称为()。A&#xff0e;国际互联网B&#xff0e;广域网C&#xff0e;局域网D&#xff0e;世界信息网INTERNET也称为()。A.局域网B.对等网C.国际互联网D.以太网因特网(Internet)又称A、局域网B、…

substring 在C#,Javascript,SQL 中index开始值

substring函数index参数在三个平台的开始值: 平台index参数开始值C#0Javascript0SQL1转载于:https://www.cnblogs.com/jimcsharp/p/4354192.html

Android的十六进制颜色值

颜色和不透明度 (alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是 0 到 255&#xff08;00 到 ff&#xff09;。对于 alpha&#xff0c;00 表示完全透明&#xff0c;ff 表示完全不透明。表达式顺序是“aabbggrr”&#xff0c;其中“aaalpha”&#xff08;00 到 ff&am…

在线mod计算机,MOD大师教程 手把手教你改造电脑机箱

MOD将代替DIY风靡中国中国的DIY已经从P2时代极少数的用户发展到现在让品牌机头疼不已的庞大用户群体&#xff0c;电脑的DIY已经不能再被说成是一个技术了。那么追求个性的玩家们只能坐以待毙吗&#xff1f;当然不是了&#xff0c;于是MOD在国内也慢慢地兴盛起来。漂亮的机箱主题…

signals系列之一——基本用法

摘自&#xff1a;http://zengrong.net/post/1504.htm转载于:https://www.cnblogs.com/man-li/p/4354201.html