HDU OJ 5441 Travel 2015online E
题目:click here
题意:
有个很暴躁的人,想坐车旅行n个城市。连接城市共有m条路(双向)。他坐在车上很不爽,每次最多忍耐x分钟。但是每站下车他又可以休息(重新计时)。总共有q次询问。问途中有多少条路他可以不爆发。a到b 和 b到a 算不同的路。 a 和 b 必须不相同。
分析:
并查集
#include <iostream>
#include <cstdio>
#include <algorithm> using namespace std;
const int M = 2e4+; struct Edge { // 保存结点信息
int from, to, cost;
bool operator < ( const Edge x ) const { return cost < x.cost; }
} es[M*]; struct Query { // 保存问题信息
int val, id;
bool operator < ( const Query x ) const { return val < x.val; };
} que[]; int n, m, q;
int pre[M]; // 并查集
int ans[M]; // 答案
int sum[M]; // 记录并查集树高度 int find( int x ) {
return pre[x] == x ? x : pre[x] = find( pre[x] );
}
void merge( int x, int y ) {
x = find( x ); y = find( y );
if( sum[x] > sum[y] ) { sum[x] += sum[y]; pre[y] = x; }
else { sum[y] += sum[x]; pre[x] = y; }
}
void solve() {
scanf("%d%d%d", &n, &m, &q );
for( int i=; i<m; i++ )
scanf("%d%d%d", &es[i].from, &es[i].to, &es[i].cost );
sort( es, es+m );
for( int i=; i<q; i++ ) {
scanf("%d", &que[i].val );
que[i].id = i;
}
sort( que, que+q );
for( int i=; i<=n; i++ ) { pre[i] = i; sum[i] = ; }
int j = ;
int res = ;
for( int i=; i<q; i++ ) {
for( ; j<m && que[i].val>=es[j].cost; j++ ) {
int x = find( es[j].from );
int y = find( es[j].to );
if( x == y ) continue;
res += sum[x] * sum[y];
merge( es[j].from, es[j].to );
}
ans[que[i].id] = res;
}
for( int i=; i<q; i++ )
printf("%d\n", ans[i]<< );
} int main() {
int t; scanf("%d", &t );
while( t-- ) {
solve();
} return ;
}
HDU OJ 5441 Travel 2015online E的更多相关文章
- [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ
前言 做过杭电.浙大或是北大等ACM题库的人一定对“刷题”不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到“Online Exercise”下的 ...
- hdu oj 1285 确定比赛名次
hdu oj 1285 确定比赛名次 题目: 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- sort(hdu oj 1425)计数排序和快速排序
Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0 < n,m < 1000000),第二行包含n个各不 ...
- hdu 5441 Travel 离线带权并查集
Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...
- HDU 5441 Travel(并查集+统计节点个数)
http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给出一个图,每条边有一个距离,现在有多个询问,每个询问有一个距离值d,对于每一个询问,计算出有多少点 ...
- hdu 5441 Travel (2015长春网赛)
http://acm.hdu.edu.cn/showproblem.php?pid=5441 题目大意是给一个n个城市(点)m条路线(边)的双向的路线图,每条路线有时间值(带权图),然后q个询问,每个 ...
- hdu 5441 travel 离线+带权并查集
Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem Descript ...
- hdu 5441 Travel(并查集)
Problem Description Jack likes to travel around the world, but he doesn’t like to wait. Now, he is t ...
- HDU 5441——Travel——————【并查集+二分查界限】
Travel Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Su ...
随机推荐
- CentOS 七 vs CentOS 6的不同
CentOS 七 vs CentOS 6的不同 CentOS 7 vs CentOS 6的不同(1)桌面系统[CentOS6] GNOME 2.x[CentOS7] GNOME 3.x(GNOME ...
- 字符串比较必须使用strcmp
char s1[]="this" char *s2 = "this" if(s1=="this"){ printf("s1 is ...
- 顺序栈之C++实现
顺序栈就是用顺序表(数组)实现的栈.其组织形式如下图所示: 下面介绍下我用C++实现的顺序栈,在VC6下调试通过.不足之处还请指正. 1.文件组织 2.ss.h栈类的声明及宏的定义 #ifndef _ ...
- nodejs开发微信1——微信access-token和tickets的数据模型
/* jshint -W079 */ /* jshint -W020 */ "use strict"; //var _ = require("lodash"); ...
- 如何学习.Net的步骤
如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET. ASP. ...
- asp.net、html、javascript等比较有用的网站
Learn模块下web.mvc.razor等. http://www.asp.net/ 包括html.javascript.jquery.xml等教程. http://www.w3school.com ...
- Unity3D嵌入WPF教程
Unity3D嵌入WPF教程 创建一个 类库工程 添加 WindowForm 用户控件 (UserControl) 1).引入 UntiyWebPlayer COM 组件 在工具->选择工具箱中 ...
- 如何升级CentOS 6.5下的MySQL
如何升级CentOS 6.5下的MySQL http://jingyan.baidu.com/article/48a42057e9b9bca9242504ab.html | 浏览:1136 | 更新: ...
- python request模块学习
安装: pip install requests 使用: import requests HTTP请求:GET.POST.PUT.DELETE.HEAD.OPTIONS 1) get res = re ...
- javascript 数组和字符串的转化
字符串转化为数组 'abcde' -> ['a', 'b', 'c', 'd', 'e'] 简单一点的方法,__String.prototype.split__可以将字符串转化为数组,分隔符为空 ...