bzoj 4383: [POI2015]Pustynia
复习了一下线段树优化建图的姿势,在线段树上连边跑拓扑排序
这题竟然卡vector……丧病
#include <bits/stdc++.h>
#define N 1810000
using namespace std;
int s, n, m;
int pi[N], vis[N];
int lt[N], nt[N], bi[N], ci[N];
int lp[N], np[N], bp[N];
int tl;
int lb[N], rb[N], lc[N], rc[N];
int out[N], intr[N];
int Q[N], fr, bc;
inline void build(int a, int b, int c)
{
nt[++ tl] = lt[a]; lt[a] = tl; bi[tl] = b; ci[tl] = c;
np[tl] = lp[b]; lp[b] = tl; bp[tl] = a; out[a] ++;
/*
bi[a].push_back(b);
bp[b].push_back(a);
ci[a].push_back(c);
*/
//printf("%d %d %d\n", a, b, c);
}
int tot;
void dfs_build(int t, int l, int r, int x)
{
if (l > r) return;
if (l <= lb[t] && rb[t] <= r) {build(x, t, ); return;}
if (l <= rb[lc[t]]) dfs_build(lc[t], l, r, x);
if (r >= lb[rc[t]]) dfs_build(rc[t], l, r, x);
}
int build_tree(int l, int r)
{
int t = ++ tot;
lb[t] = l; rb[t] = r;
if (l != r)
{
lc[t] = build_tree(l, (l + r) / );
rc[t] = build_tree((l + r) / + , r);
build(t, lc[t], );
build(t, rc[t], );
}
else intr[l] = t;
return t;
} inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} int main()
{
n = read(); s = read(); m = read();
build_tree(, n);
for (int i = ; i <= s; ++ i)
{
int p, d;
p = read(); d = read();
pi[intr[p]] = d;
} //return 0;
for (int i = ; i <= m; ++ i)
{
int l, r, k;
l = read(); r = read(); k = read(); for (int j = , p = l - ; j <= k + ; ++ j)
{
int a;
if (j <= k)
{
a = read();
build(intr[a], tot + i, );
}
else a = r + ;
if ((a - ) - (p + ) <= )
{
for (int q = p + ; q < a; ++ q)
build(tot + i, intr[q], );
}
else
dfs_build(, p + , a - , tot + i);
p = a;
}
}
for (int i = ; i <= m + tot; ++ i)
if (!out[i]) Q[bc ++] = i; while (fr != bc)
{
int hd = Q[fr ++]; vis[hd] = ;
int mx = ;
for (int i = lt[hd]; i; i = nt[i])
mx = max(mx, pi[bi[i]] + ci[i]);
if (!pi[hd])
{
if (mx > )
{
puts("NIE");
return ;
}
pi[hd] = mx;
}
else if (mx > pi[hd])
{
puts("NIE");
return ;
} for (int i = lp[hd]; i; i = np[i])
{
out[bp[i]] --;
if (!out[bp[i]])
Q[bc ++] = bp[i];
}
}
for (int i = ; i <= m + tot; ++ i)
if (!vis[i]) {puts("NIE"); return ;}
puts("TAK");
for (int i = ; i <= n; ++ i) printf("%d ", pi[intr[i]]);
}
话说是不是在主席树上也可以干一样的事情呢(手动斜眼
bzoj 4383: [POI2015]Pustynia的更多相关文章
- @bzoj - 4378@ [POI2015] Pustynia
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 n 的正整数序列 a,每个数都在 1 到 10^ ...
- [POI2015]Pustynia
[POI2015]Pustynia 题目大意: 给定一个长度为\(n(n\le10^5)\)的正整数序列\(a\),每个数都在\(1\)到\(10^9\)范围内,告诉你其中\(s\)个数,并给出\(m ...
- 【BZOJ4383】[POI2015]Pustynia 线段树优化建图
[BZOJ4383][POI2015]Pustynia Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r ...
- 洛谷P3588 - [POI2015]Pustynia
Portal Description 给定一个长度为\(n(n\leq10^5)\)的正整数序列\(\{a_n\}\),每个数都在\([1,10^9]\)范围内,告诉你其中\(s\)个数,并给出\(m ...
- bzoj 4386: [POI2015]Wycieczki
bzoj 4386: [POI2015]Wycieczki 这题什么素质,爆long long就算了,连int128都爆……最后还是用long double卡过的……而且可能是我本身自带大常数吧,T了 ...
- BZOJ 4385: [POI2015]Wilcze doły
4385: [POI2015]Wilcze doły Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 648 Solved: 263[Submit][ ...
- BZOJ 4384: [POI2015]Trzy wieże
4384: [POI2015]Trzy wieże Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 217 Solved: 61[Submit][St ...
- Bzoj 3747: [POI2015]Kinoman 线段树
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 553 Solved: 222[Submit][Stat ...
- BZOJ 3747 POI2015 Kinoman 段树
标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...
随机推荐
- MySql数据库基本介绍和基本语法
一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...
- POJ - 3062 Borg Maze
题目链接:http://poj.org/problem?id=3026 Svenskt Masterskap我程序员/ Norgesmesterskapet 2001 Description The ...
- debug经验汇总
(1)使用pstack (2)调试core文件 # gdb ./segment core (3)使用strace strace -tt -f -s 1234 -o /tmp/strace.cwc -p ...
- JS的数据类型转换
JS 数据类型转换 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...
- 【转】获取/设置IFRAME内对象元素的几种JS方法
1.IE专用(通过frames索引形象定位): document.frames[i].document.getElementById('元素的ID'); 2.IE专用(通过IFRAME名称形象定位): ...
- postfix疯狂外发垃圾邮件
分析 一.查找main.cf配置文件 localhost# find / -name main.cf /etc/postfix/main.cf 二.打开/etc/postfix/main.cf来看看. ...
- javascript 中{}和[] 的理解
下面的一段解释是摘抄的,基本理解正确,做个记录.其实js中数组其实就是对象,typeof(['a', 'b', 'c'])//测试之后结果为 : "object" 一.{ } 大 ...
- Struts+Spring+Hibernate的Web应用执行过程
struts1和spring有两种整合的方法 一种是action和spring bean映射:一种是将action交给spring初始化 第一种方式:访问.do的URL->tomcat接收到r ...
- 超级素数(sprime)
超级素数(sprime) 题目描述 超级素数是指一个素数,每去掉后面一个数字,总能保证剩下的数为质数,例如:373->37->3这是一个长为3的超级素数. 输入 输入一个整数n (10≤n ...
- 在Gridview编辑时添加DropDownList控件并设置默认值
页面代码: <asp:GridView ID="GridView1" runat="server" AutoGenerateCol ...