复习了一下线段树优化建图的姿势,在线段树上连边跑拓扑排序

这题竟然卡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的更多相关文章

  1. @bzoj - 4378@ [POI2015] Pustynia

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 n 的正整数序列 a,每个数都在 1 到 10^ ...

  2. [POI2015]Pustynia

    [POI2015]Pustynia 题目大意: 给定一个长度为\(n(n\le10^5)\)的正整数序列\(a\),每个数都在\(1\)到\(10^9\)范围内,告诉你其中\(s\)个数,并给出\(m ...

  3. 【BZOJ4383】[POI2015]Pustynia 线段树优化建图

    [BZOJ4383][POI2015]Pustynia Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r ...

  4. 洛谷P3588 - [POI2015]Pustynia

    Portal Description 给定一个长度为\(n(n\leq10^5)\)的正整数序列\(\{a_n\}\),每个数都在\([1,10^9]\)范围内,告诉你其中\(s\)个数,并给出\(m ...

  5. bzoj 4386: [POI2015]Wycieczki

    bzoj 4386: [POI2015]Wycieczki 这题什么素质,爆long long就算了,连int128都爆……最后还是用long double卡过的……而且可能是我本身自带大常数吧,T了 ...

  6. BZOJ 4385: [POI2015]Wilcze doły

    4385: [POI2015]Wilcze doły Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 648  Solved: 263[Submit][ ...

  7. BZOJ 4384: [POI2015]Trzy wieże

    4384: [POI2015]Trzy wieże Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 217  Solved: 61[Submit][St ...

  8. Bzoj 3747: [POI2015]Kinoman 线段树

    3747: [POI2015]Kinoman Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 553  Solved: 222[Submit][Stat ...

  9. BZOJ 3747 POI2015 Kinoman 段树

    标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...

随机推荐

  1. 优化之zencart第一时间修改原始内容

    Zen Cart 基本修改指南 Zen Cart,全球顶级B2C商城网站!要想自行搭建一个基本的Zen Cart的网站,这篇文章是绝对不能错过的.目前我已经做了两个B2C网站,但是还是离不开这篇文章的 ...

  2. L1,a private conversation

    words enjoy喜欢,享受,欣赏 pay,支付,pay money for sth 报酬,I have not received my pay yet. bear,忍受,支撑,承担,负担 I c ...

  3. linux找回密码

    开机启动系统,在进入系统之前按键盘上面的Esc键,会进入下面的界面 按键盘上的e键,出现下面界面 用键盘上的方向键移动光标到第二项,然后再按键盘上面的e,会出现下面的界面 输入一个空格键,然后在输入数 ...

  4. 安装apk时出现错误Failure [INSTALL_FAILED_DEXOPT]问题解决的方法

    在android4.0源码里面编译出来apk后,用adb install (或adb install -r 重装)安装时,报错[INSTALL_FAILED_DEXOPT]. xu@xu-PC:~$  ...

  5. '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "AttentionController" nib but the view outlet was not set.'

    问题出现原因: 先创建控制器的.h与.m文件,后来创建了相应的xib文件,运行后出现这个问题. 解决办法:

  6. Android平台中实现对XML的三种解析方式

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  7. Java 六种异常处理的陋习(转)

    Java 六种异常处理的陋习 原文链接:  http://www.cnblogs.com/Android-and-android/archive/2013/05/02/3054469.html 你觉得 ...

  8. ZOJ 3696 Alien's Organ 概率论 泊松分布

    看了好久的题,但还是看得一脸蒙圈,感觉完全无从下手,我的队友告诉我可能是正太分布之类的,但我感觉不太像,后来才听同学说是泊松分布,才恍然大悟,概率论刚刚学过这里不久,不禁感叹,学会了还要会用啊... ...

  9. Permission denied: user=xxj, access=WRITE, inode="user":hadoop:supergroup:rwxr-xr-x

    在windows中运行eclipse时报错Permission denied: user=xxj, access=WRITE, inode="user":hadoop:superg ...

  10. Mac os 10.11 更新ruby

    1.装cocoapods,ruby版本忒低->开始更新ruby->开始更新gem,这是一条不归路啊同志们,各种permission denied,各种路径不存在,各种路径没有读写权限,各种 ...