r8 - ASC 41(俄罗斯多校)
1 今天干的俄罗斯的一场多校,被虐哭啊,就做出两题。
  2 
  3 
  4 
  5 
  6 
  7
| Gym 100496D | Data Mining | 
8 题目讲得是给你一串数字,然后给你i,p,表示从第i开始,对这串数离散话,并且离散化后的字典序要最小,然后输出原来下标为i+p的离散化后的值
  9 是多少。
 10 假设i+p这个位置上的数为a。 
 11 如果在(i,i+p)这个范围内没有a,并且这个区间内没有重复的数,那么答案就是p
 12 那么按照这个思路走,其实我们只要知道距离i位置最近的a的下标为r,那么其实我们只要知道(i,r)这个区间中有多少个不同的数n,那么答案就是
 13 n+1。
 14 因为数据比较大,所已对于每次的询问的复杂度必须做到O(1) , O(log(n)) 或 O(sqrt(n)).
 15 就这道题而言用线段数O(logn)是可以的,进爷用默队算法O(sqrt(n))也做到了,我也想到了一种O(logn)的算法,蛋奶和,写不出来:
 16 首先我们用RMQ预处理出每段区间的最大值,然后在询问的过程中我们便能用O(1)知道要求的区间的最大值R了,然后呢,用线段数去求R在这段区间按里是
 17 第k大,然后k就是答案。(大家都觉得蛮有道理,但都懒得敲。。。)
 18 
 19 
 20
| Gym 100496H | House of Representatives | 
22 题目告诉你n个城市的人口p[n],他们是构成了一棵树,在告诉你n-1条的路w[n],从一个城市v到u所需要的代价为p[v]*(u到v的距离). 
 23 然后我们要在n个城市里选出一个当首都,使其他所有城市到他的代价和最小。
 24 欣爷一看就说是树形dp,然后就a掉了。
 25 我们可以以编号为1的城市为根开始搜索,用o(n)的复杂度,得到一棵树,用d[u]来保存u这个节点的所有子节点到它的代价和,sum[u]来保存每棵子数
 26 中总人口量。
 27 这样一遍下来,其实我们就知道了以1号城市为首都的待价d[1],我们设dp[n]为n号城市当首都的代价,显然dp[1] = d[1] ;
 28 然后如果你思路足够清晰的话可以得到这样一个递推式,设u为v的母亲,n个城市的总人数为all , 
 29 那么dp[v] = d[v] +(all - sum[v])*(u到v的长度)+ dp[u] - d[v] - sum[v]*(u到v的长度) ;
#include<stdio.h>
#include<vector>
#include<set>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll ;
const int M = + ;
int n , city[M] ;
vector<pair<int , int> > g[M] ;
ll d[M] , dp[M];
bool vis[M] ;
ll sum[M] ;
ll all ;
ll minn , id ; void tree (int u) {
for (int i = ; i < g[u].size () ; i ++) {
int v = g[u][i].first ;
if (vis[v]) continue ;
vis[v] = ;
dp[v] = (all - sum[v] ) * g[u][i].second + dp[u] - sum[v] * g[u][i].second ;
if (dp[v] < minn) {
minn = dp[v] ;
id = v ;
}
tree (v) ;
}
} void dfs (int u) {
for (int i = ; i < g[u].size () ; i ++) {
int v = g[u][i].first ;
if (vis[v] ) continue ;
vis[v] = ;
dfs (v) ;
d[u] += sum[v] * g[u][i].second + d[v] ;
sum[u] += sum[v] ;
}
} int main () {
freopen ("house.in" , "r" , stdin) ;
freopen ("house.out" , "w" , stdout) ;
scanf ("%d" , &n ) ;
for (int i = ; i < n ; i ++) {
scanf ("%d" , &city[i + ] ) ;
sum[i + ] = city[i + ] ;
all += sum[i + ] ;
}
for (int i = ; i < n - ; i ++) {
int u , v , w ;
scanf ("%d%d%d" , &u , &v , &w) ;
g[u].push_back (make_pair (v , w) ) ;
g[v].push_back (make_pair (u , w) ) ;
}
//printf ("g[0].size = %d\n" , g[0].size () ) ;
vis[] = ;
dfs ( ) ;
dp[] = d[] ;
minn = d[] ;
//for (int i = 1 ; i <= n ; i ++) printf ("d[%d] = %d , sum[%d] = %d\n" , i , d[i] , i , sum[i] ) ;
//printf ("d[0] = %d\n" , d[0] ) ;
memset (vis , , sizeof(vis)) ;
vis[] = ;
id = ;
tree ( ) ;
printf ("%I64d %I64d\n" , id , minn ) ;
return ;
}
30
r8 - ASC 41(俄罗斯多校)的更多相关文章
- oracle 小题
		
create table student(sno varchar2(10) primary key,sname varchar2(20),sage number(2),ssex varchar2(5) ...
 - 另一套Oracle SQL练习题,更新参考答案
		
题干: create table student( sno ) primary key, sname ), sage ), ssex ) ); create table teacher( tno ) ...
 - MySql练习+加源代码
		
一.设有一个数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...
 - SQL查询 练习题
		
设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...
 - Oracle数据库作业-6  查询成绩比该课程平均成绩低的同学的成绩表
		
33. 查询成绩比该课程平均成绩低的同学的成绩表. select * from score a where a.degree between 0 and( select avg(degree) fro ...
 - 2014-11-9------- 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。
		
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
 - Extjs4学习
		
1 Ext js初步 1.1 获取Extjs 下载extjs: 可以从http://extjs.org.cn/ 获得需要的extjs发布包及更多支持. 1.2 搭建学习环境: 假设您的机器已经安装my ...
 - SQL整理3
		
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
 - SQL查询语句联系
		
建立四个表,分别是学生表,课程表,成绩表和教师信息表 插入信息: 题目: 1. 查询Student表中的所有记录的Sname.Ssex和Class列 select Sname,Ssex,Class f ...
 
随机推荐
- UOJ #10 pyx的难题
			
pyx的难题 被这题搞得生无可恋. 容易看出 题目完成时间与优先级之间的关系是单调的,故可以二分答案. 用于二分的答案可以取\(O(n)\)个离散值, 这样就很方便地保证了优先级各不相同. 可以用优先 ...
 - libjpeg 编译makfile
			
一.准备 首先需要下载libjpeg库,网址在这里:http://www.ijg.org/ 如果不想编译就在这下载吧:http://pan.baidu.com/s/1hqeTDre 二.编译 1. 解 ...
 - elk系列2之multiline模块的使用
			
preface 上回说道了elk的安装以及kibana的简单搜索语法,还有logstash的input,output的语法,但是我们在使用中发现了一个问题,我们知道,elk是每一行为一个事件,像Jav ...
 - virtualenv中ImportError: No module named django
			
问题现象:在代码py文件中,import django 报错,但是在python shell中直接执行这个语句没错, 网上搜索了下,自己测试了下,确定原因是由于使用了python中的virtualen ...
 - shell text process code
			
shell 命令处理文本: 1. 批量处理该目录下的文件,ls | while read l ; do echo $l ; done > b.txt 2. 批量处理文件的每一行 , cut - ...
 - Yocto开发笔记之《Tip-设置程序开机启动》(QQ交流群:519230208)
			
QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 IMX6UL,转载请注明出处 ============================================== ...
 - ORACLE函数大全
			
SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ...
 - jQuery学习笔记——弹出对话框
			
引用jQuery库文件的<script>标签,必须放在引用自定义脚本文件的<script>标签之前.否则,在编写的代码中将不能引用到jQuery框架 <script ty ...
 - Nginx+PHP-fpm高负载优化及压力测试方法
			
Nginx+PHP-fpm组合,以内存占用小,负载能力强壮的特点,成为小内存VPS建站的首选组合.我们一起来探讨一下nginx+php-fpm高负载的优化方法. 先来看看nginx配置参数的优化.ng ...
 - ansible定时任务
			
不得不说,ansible很强大,ansible定制任务模块显示 ansible all -m cron -a 'name="ban IP of login" minute=* ho ...