Codevs 3287 货车运输
题目描述 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<1000,0<m<10000,0<q<1000;
对于 60%的数据,0<n<1000,0<m<50000,0<q<1000;
对于 100%的数据,0<n<10000,0<m<50000,0<q<30000,0≤z≤100000。
题解
- 最小生成树
- LCA
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#define INF 1000000007
using namespace std;
struct et
{
int l, s, t;
};
bool operator < (const et &a, const et &b)
{
return a.l > b.l;
}
struct pt
{
int a, b;
pt(const int &x, const int &y)
{
a = x;
b = y;
}
pt()
{
a = 0;
b = 0;
}
};
int f[10010], m, n, z;
pt fa[10010];
et edge[50010];
vector<pt> c[10010], son[10010];
int find(int x)
{
return x == f[x] ? x : f[x] = find(f[x]);
}
int depth[10010];
bool vis[10010];
deque<int> q;
int bfs(int s)
{
vis[s] = true;
depth[s] = 1;
q.push_back(s);
int now;
while (!q.empty())
{
now = q.front();
q.pop_front();
for (vector<pt>::iterator i = c[now].begin(); i != c[now].end(); ++i)
{
if (!vis[i -> a])
{
q.push_back(i -> a);
depth[i -> a] = depth[now] + 1;
vis[i -> a] = true;
fa[i -> a].a = now;
fa[i -> a].b = i -> b;
son[i -> a].push_back(*i);
}
}
}
}
int query(int s, int t)
{
int x = s, y = t, ret = INF;
while (depth[x] < depth[y])
{
ret = min(ret, fa[y].b);
y = fa[y].a;
}
while (depth[x] > depth[y])
{
ret = min(ret, fa[x].b);
x = fa[x].a;
}
while (x != y)
{
ret = min(ret, fa[x].b);
x = fa[x].a;
ret = min(ret, fa[y].b);
y = fa[y].a;
}
return ret;
}
int main ()
{
cin.tie(0);
cout.tie(0);
cin.sync_with_stdio(false);
cout.sync_with_stdio(false);
cin >> n >> m;
for (int i = 0 ; i < m; ++i)
cin >> edge[i].s >> edge[i].t >> edge[i].l;
sort(edge, edge + m);
for (int i = 1; i <= n; ++i)
f[i] = i;
int p = 0;
for (int i = 1; i < n; ++i)
{
while (find(edge[p].s) == find(edge[p].t) && p < m)
++p;
if (p >= m)
break;
f[find(edge[p].s)] = find(edge[p].t);
c[edge[p].s].push_back(pt(edge[p].t, edge[p].l));
c[edge[p].t].push_back(pt(edge[p].s, edge[p].l));
++p;
}
bfs(1);
int qq;
cin >> qq;
int a, b;
for (int i = 0; i < qq; i++)
{
cin >> a >> b;
if (find(a) != find(b))
cout << -1 << endl;
else
cout << query(a, b) << endl;
}
}
运行结果(有点慢 LCA 毕竟用的是朴素)
测试通过 Accepted
总耗时: 1033 ms
0 / 0 数据通过测试.
运行结果
测试点#truck1.in 结果:AC 内存使用量: 872kB 时间使用量: 1ms
测试点#truck10.in 结果:AC 内存使用量: 1384kB 时间使用量: 24ms
测试点#truck11.in 结果:AC 内存使用量: 1512kB 时间使用量: 26ms
测试点#truck12.in 结果:AC 内存使用量: 1512kB 时间使用量: 23ms
测试点#truck13.in 结果:AC 内存使用量: 2280kB 时间使用量: 115ms
测试点#truck14.in 结果:AC 内存使用量: 2152kB 时间使用量: 119ms
测试点#truck15.in 结果:AC 内存使用量: 2156kB 时间使用量: 102ms
测试点#truck16.in 结果:AC 内存使用量: 2028kB 时间使用量: 97ms
测试点#truck17.in 结果:AC 内存使用量: 2280kB 时间使用量: 113ms
测试点#truck18.in 结果:AC 内存使用量: 2028kB 时间使用量: 104ms
测试点#truck19.in 结果:AC 内存使用量: 2024kB 时间使用量: 108ms
测试点#truck2.in 结果:AC 内存使用量: 748kB 时间使用量: 1ms
测试点#truck20.in 结果:AC 内存使用量: 2156kB 时间使用量: 105ms
测试点#truck3.in 结果:AC 内存使用量: 1000kB 时间使用量: 4ms
测试点#truck4.in 结果:AC 内存使用量: 1004kB 时间使用量: 5ms
测试点#truck5.in 结果:AC 内存使用量: 1004kB 时间使用量: 8ms
测试点#truck6.in 结果:AC 内存使用量: 872kB 时间使用量: 4ms
测试点#truck7.in 结果:AC 内存使用量: 1512kB 时间使用量: 28ms
测试点#truck8.in 结果:AC 内存使用量: 1388kB 时间使用量: 24ms
测试点#truck9.in 结果:AC 内存使用量: 1388kB 时间使用量: 22ms
Codevs 3287 货车运输的更多相关文章
- Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...
- Codevs 3287 货车运输 == 洛谷P1967
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 n 座城市,编 ...
- codevs 3287 货车运输 NOIP2013提高组
题目链接:http://codevs.cn/problem/3287/ 题解: 和bzoj3732一毛一样,只不过是找最大生成树和最小值罢了,具体参见我的bzoj3732的博客 #include< ...
- [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
一开始觉得是网络流..仔细一看应该是最短路,再看数据范围..呵呵不会写...这道题是最大生成树+最近公共祖先.第一次写..表示各种乱.. 因为要求运输货物质量最大,所以路径一定是在最大生成树上的.然后 ...
- AC日记——货车运输 codevs
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descri ...
- NOIP2013 货车运输 (最大生成树+树上倍增LCA)
死磕一道题,中间发现倍增还是掌握的不熟 ,而且深刻理解:SB错误毁一生,憋了近2个小时才调对,不过还好一遍AC省了更多的事,不然我一定会疯掉的... 3287 货车运输 2013年NOIP全国联赛提高 ...
- C++之路进阶——codevs3287(货车运输)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 n ...
- Codevs3278[NOIP2013]货车运输
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 ...
- codevs3287货车运输(最小生成树+LCA)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 ...
随机推荐
- 线段树(多维+双成段更新) UVA 11992 Fast Matrix Operations
题目传送门 题意:训练指南P207 分析:因为矩阵不超过20行,所以可以建20条线段的线段树,支持两个区间更新以及区间查询. #include <bits/stdc++.h> using ...
- CodeForceS#276-B(求最大值)
B. Valuable Resources Many computer strategy games require building cities, recruiting army, conqu ...
- 【原】iOS学习45之多媒体操作
1. 音频 1> 音频实现简述 iOS 里面共有四种专门实现播放音频的方式: System Sound Services(系统声音服务) OpenAL(跨平台的开源的音频处理接口) Audio ...
- 【转】SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法
转自:http://www.coderli.com/junit-spring-test-applicationcontext JUnit单元测试用例中使用Spring框架,直接方式如下. @RunWi ...
- 网易大手笔领投美国VR触觉公司AxonVR
12月8日消息,美国西雅图VR触觉公司AxonVR今日宣布完成了580万美元的种子轮融资,由中国网易和Dawn Patrol Ventures领投.此次融资完成后AxonVR的总融资额将攀升至700万 ...
- 深入理解Java:注解(Annotation)基本概念
转自:http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html 竹子-博客(.NET/Java/Linux/架构/管理/敏捷) 什么是注 ...
- Codeforces Round #249 (Div. 2) A - Queue on Bus Stop
水题 #include <iostream> #include <vector> #include <algorithm> using namespace std; ...
- 腾讯 pc端面试(2015.10.26)
整个面试过程全部围绕着我在前一家公司做过的项目开始提问.因为这个项目是我主要负责的,所以面试官第一个问题是让我讲解了整个项目的框架结构.在对于项目的框架结构的讲解方面,大致条理还算清醒但是因为很少对做 ...
- ThreadLocal解析
ThreadLocal 如果定义了一个单实例的java bean,它有若干属性,但是有一个属性不是线程安全的,比如说HashMap.并且碰巧你并不需要在不同的线程中共享这个属性,也就是说这个属性不存在 ...
- 【8.0、9.0c】树形列表 列标题 不对齐的问题及解决方案
树形视图状态经常会碰到字体上下排列不整齐的问题,虽不是什么大问题,但对某些处女座的人来说,真的是如鲠在喉,今天我们就来解决这个问题: 首先呢,这个问题的起因,不是前端css的问题,也不是js的问题,而 ...