P1967 货车运输
P1967 货车运输
最大生成树+lca+并查集
- #include<iostream>
- #include<cstdio>
- #include<queue>
- #include<algorithm>
- #include<cmath>
- #include<ctime>
- #include<set>
- #include<map>
- #include<stack>
- #include<cstring>
- #define inf 2147483647
- #define For(i,a,b) for(register int i=a;i<=b;i++)
- #define p(a) putchar(a)
- #define g() getchar()
- //by war
- //2017.11.8
- using namespace std;
- int n,m,q;
- int x,y,z;
- int cnt;
- int Min[][];
- int f[][];
- int d[];
- int deep[];
- struct kru
- {
- int l,r,v;
- bool operator<(const kru&a)const
- {
- return v>a.v;
- }
- }E[];
- struct node
- {
- int n;
- int v;
- node *next;
- }*e[];
- inline void in(register int &x)
- {
- int y=;
- char c=g();x=;
- while(c<''||c>'')
- {
- if(c=='-')
- y=-;
- c=g();
- }
- while(c<=''&&c>='')x=(x<<)+(x<<)+c-'',c=g();
- x*=y;
- }
- inline void o(register int x)
- {
- if(x<)
- {
- p('-');
- x=-x;
- }
- if(x>)o(x/);
- p(x%+'');
- }
- inline int find(register int x)
- {
- if(d[x]==x)return x;
- d[x]=find(d[x]);
- return d[x];
- }
- inline void push(register int x,register int y,register int v)
- {
- node *p;
- p=new node();
- p->n=y;
- p->v=v;
- if(e[x]==NULL)
- e[x]=p;
- else
- {
- p->next=e[x]->next;
- e[x]->next=p;
- }
- }
- inline void build(register int now)
- {
- deep[now]=deep[f[now][]]+;
- for(register int i=;(<<i)<=n;i++)
- {
- Min[now][i]=min(Min[now][i-],Min[f[now][i-]][i-]);
- f[now][i]=f[f[now][i-]][i-];
- }
- for(node *i=e[now];i!=NULL;i=i->next)
- {
- if(i->n!=f[now][])
- {
- f[i->n][]=now;
- Min[i->n][]=i->v;
- build(i->n);
- }
- }
- }
- int query(int x,int y)
- {
- int MIN=inf;
- if(deep[x]<deep[y])
- swap(x,y);
- int c=deep[x]-deep[y];
- for(register int i=;(<<i)<=c;i++)
- if((<<i)&c)
- {
- MIN=min(MIN,Min[x][i]);
- x=f[x][i];
- }
- if(x==y)
- return MIN;
- c=log2(deep[x]);
- for(register int i=c;i>=;i--)
- {
- if(f[x][i]!=f[y][i])
- {
- MIN=min(MIN,Min[x][i]);
- MIN=min(MIN,Min[y][i]);
- x=f[x][i];
- y=f[y][i];
- }
- }
- return min(MIN,min(Min[y][],Min[x][]));
- }
- int main()
- {
- in(n),in(m);
- For(i,,n)
- d[i]=i;
- For(i,,m)
- in(E[i].l),in(E[i].r),in(E[i].v);
- sort(E+,E+m+);
- For(i,,m)
- {
- if(find(E[i].l)!=find(E[i].r))
- {
- d[find(E[i].l)]=find(E[i].r);
- cnt++;
- push(E[i].l,E[i].r,E[i].v);
- push(E[i].r,E[i].l,E[i].v);
- }
- if(cnt==n-)
- break;
- }
- Min[][]=inf;
- build();
- in(q);
- For(i,,q)
- {
- in(x),in(y);
- if(find(x)!=find(y))
- o(-),p('\n');
- else
- o(query(x,y)),p('\n');
- }
- return ;
- }
P1967 货车运输的更多相关文章
- 洛谷 P1967 货车运输
洛谷 P1967 货车运输 题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在 ...
- 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增
倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...
- Luogu P1967 货车运输(Kruskal重构树)
P1967 货车运输 题面 题目描述 \(A\) 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\) ,城市之间有 \(m\) 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 \ ...
- 【杂题总汇】NOIP2013(洛谷P1967) 货车运输
[洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...
- P1967 货车运输(倍增LCA,生成树)
题目链接: https://www.luogu.org/problemnew/show/P1967 题目描述 A国有n座城市,编号从 1到n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制, ...
- 洛谷 P1967 货车运输 Label: 倍增LCA && 最小瓶颈路
题目描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多 ...
- 洛谷 P1967 货车运输(克鲁斯卡尔重构树)
题目描述 AAA国有nn n座城市,编号从 11 1到n nn,城市之间有 mmm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qqq 辆货车在运输货物, 司机们想知道每辆车在不超过车 ...
- P1967 货车运输 树链剖分
题目描述 AA国有nn座城市,编号从 11到nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最 ...
- 洛谷P1967 货车运输
题目描述 \(A\)国有\(n\)座城市,编号从\(1\)到\(n\),城市之间有\(m\)条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有\(q\)辆货车在运输货物, 司机们想知道每辆车在 ...
随机推荐
- Weblogic12c 单节点安装
第一节weblogic12c 的安装 WebLogic除了包括WebLogic Server服务器之外,还包括一些围绕WebLogic的产品,习惯上我们说的WebLogic是指WebLogic S ...
- Confluence 6 查看内容索引概要
内容索引,通常也被称为查找索引,这个索引被用来在 Confluence 中支持查找.这个索引同时也被其他的一些功能使用,例如在归档邮件中构建邮件主题,View Space Activity 的特性和将 ...
- Ionic3.0 输入状态时隐藏Tabs栏
刚接触ionic3 不久 ,发现遍地都是坑,昨天遇到一个问题就是当键盘弹起的时候tabs 也被 弹了起来,最初预想是放在tabs 的一个子页面内处理这个问题, Tabs隐藏后,我们发现底部有部分空白, ...
- JS实现的ajax和同源策略
一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器响应内容不再是整个页面,而是页 ...
- LeetCode(102):二叉树的层次遍历
Medium! 题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 ...
- poj2942 求v-DCC,二分图判奇环,补图
/* 给定一张无向图,求有多少点不被任何奇环包含 推论1:如果两个点属于两个不同的v-DCC,则他们不可能在同一个奇环内 推论2:某个v-DCC中有奇环,则这个v-DCC中所有点必定被属于某个奇环 只 ...
- git bash here 的 ~/.bashrc 配置文件。和 vue/cli 3. 0 的 .vuerc文件(preset )
今天就来讲一下git有关的小技巧,.bashrc文件是用户配置文环境变量的文件,每次git bash会首先运行里面的内容 1.自动运行 每次进入git bash都会先读取.bashrc里面的内容,因此 ...
- GetSystemInfo()
关于“GetSystemInfo()”的详细信息,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(v=vs.8 ...
- 基于“MVC”框架集设计模式,开发用户管理系统!
MVC----(Model View Controller)设计模型: M:表示业务数据和业务规则.包括DAO(beans).DBHelper(DBHelper),用于封装数据库连接,业务数据库处理. ...
- Play框架--初学笔记
目录结构 web_app 根目录 | sbt SBT Unix 批处理脚本用于启动sbt-launch.jar | sbt.bat SBT Windows 批处理脚本用于启动sbt-launch.ja ...