problem

线段树优化建图,拓扑,没了。

#include <bits/stdc++.h>

#define ls(x) ch[x][0]
#define rs(x) ch[x][1]
#define rep(i , j , k) for(int i = j ; i <= k ; i ++)
#define Rep(i , j , k) for(int i = j ; i >= k ; i --) using namespace std ;
using ll = long long ;
using pii = pair <int , int> ;
using vii = vector <int> ;
// #define int long long
auto ot = [&]() { cerr << "ATS TXDY" << '\n' ; int ATS_nantf_txdy = true ; } ;
auto _ios = [&]() { ios :: sync_with_stdio(false) ; cin.tie(nullptr) ; cout.tie(nullptr) ; } ; namespace stO_ATS_Orz {
template < class T > void cmax(T & x , T y) { if(x < y) x = y ; }
template < class T > void cmin(T & x , T y) { if(x > y) x = y ; }
template < class T > void abs(T x) { if(x < 0) x = -x ; }
int n , s , m ;
const int N = 1e5 + 10 ;
const int M = 2e5 + 10 ;
const int limit = 1e9 ;
struct Edge { int v , nxt , w ; } e[N * 30] ;
int val[N << 3] , d[N << 3] , deg[N << 3] , ls[N << 3] , rs[N << 3] ;
int head[N << 3] , ecnt = 0 , rt , cnt = 0 ;
bool vis[N << 3] ;
void add(int u , int v , int w) { e[++ ecnt] = { v , head[u] , w } ; head[u] = ecnt ; deg[v] ++ ; }
void build(int l , int r , int & p) {
if(l == r) { p = l ; return ; }
p = ++ cnt ; int mid = l + r >> 1 ;
build(l , mid , ls[p]) ; build(mid + 1 , r , rs[p]) ;
add(ls[p] , p , 0) ; add(rs[p] , p , 0) ;
}
void upd(int a , int b , int l , int r , int p , int to) {
if(a <= l && r <= b) { add(p , to, 0) ; return ; }
int mid = l + r >> 1 ;
if(a <= mid) upd(a , b , l , mid , ls[p] , to) ;
if(b > mid) upd(a , b , mid + 1 , r , rs[p] , to) ;
}
void topsort() {
queue < int > q ;
for(int i = 1 ; i <= cnt ; i ++) { if(! d[i]) d[i] = 1 ; if(! deg[i]) q.push(i) ; }
while(q.size()) {
int u = q.front() ; q.pop() ; vis[u] = 1 ;
for(int i = head[u] ; i ; i = e[i].nxt) {
int v = e[i].v ; cmax(d[v] , d[u] + e[i].w) ;
if(val[v] && d[v] > val[v]) { cout << "NIE" << '\n' ; exit(0) ; }
if(! -- deg[v]) q.push(v) ;
}
}
}
void main() {
cin >> n >> s >> m ; cnt = n ; build(1 , n , rt) ;
for(int i = 1 ; i <= s ; i ++) { int pos , _val ; cin >> pos >> _val ; d[pos] = val[pos] = _val ; }
for(int i = 1 ; i <= m ; i ++) {
int l , r , k ; cin >> l >> r >> k ;
int pre = l - 1 , now = 0 ; ++ cnt ;
while(k --) {
cin >> now ;
add(cnt , now , 1) ;
if(now > pre + 1) upd(pre + 1 , now - 1 , 1 , n , rt , cnt) ;
pre = now ;
}
if(now < r) upd(now + 1 , r , 1 , n , rt , cnt) ;
}
topsort() ;
rep(i , 1 , cnt) if(! vis[i] || d[i] > limit) { cout << "NIE" << '\n' ; return ; }
cout << "TAK" << '\n' ;
rep(i , 1 , n) cout << d[i] << ' ' ;
}
}
signed main() {
_ios() ; ot() ;
return stO_ATS_Orz :: main() , 0 ;
}

[POI2015]PUS [线段树优化建图]的更多相关文章

  1. BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序

    BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序 Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息 ...

  2. 【bzoj4383】[POI2015]Pustynia 线段树优化建图+差分约束系统+拓扑排序

    题目描述 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r,k以及接下来k个正整数,表示a[l],a[l+1],...,a[r- ...

  3. BZOJ5017 [SNOI2017]炸弹 - 线段树优化建图+Tarjan

    Solution 一个点向一个区间内的所有点连边, 可以用线段树优化建图来优化 : 前置技能传送门 然后就得到一个有向图, 一个联通块内的炸弹可以互相引爆, 所以进行缩点变成$DAG$ 然后拓扑排序. ...

  4. 【BZOJ3681】Arietta 树链剖分+可持久化线段树优化建图+网络流

    [BZOJ3681]Arietta Description Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中.但是她从未停止过和恋人 Velding 的书信往来.一 ...

  5. 【ARC069F】Flags 2-sat+线段树优化建图+二分

    Description ​ 数轴上有 n 个旗子,第 ii 个可以插在坐标 xi或者 yi,最大化两两旗子之间的最小距离. Input ​ 第一行一个整数 N. ​ 接下来 N 行每行两个整数 xi, ...

  6. 【bzoj5017】[Snoi2017]炸弹 线段树优化建图+Tarjan+拓扑排序

    题目描述 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足:  Xi−Ri≤Xj≤Xi+Ri,那么,该炸弹也会被引爆.  现在 ...

  7. 【bzoj4699】树上的最短路(树剖+线段树优化建图)

    题意 给你一棵 $n$ 个点 $n-1$ 条边的树,每条边有一个通过时间.此外有 $m$ 个传送条件 $(x_1,y_1,x_2,y_2,c)$,表示从 $x_1$ 到 $x_2$ 的简单路径上的点可 ...

  8. 【BZOJ4276】[ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流

    [BZOJ4276][ONTAK2015]Bajtman i Okrągły Robin Description 有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2 ...

  9. 【bzoj3073】[Pa2011]Journeys 线段树优化建图+堆优化Dijkstra

    题目描述 Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a, ...

随机推荐

  1. 授权认证(IdentityServer4)

    区别 OpenId: Authentication :认证 Oauth: Aurhorize :授权 输入账号密码,QQ确认输入了正确的账号密码可以登录 --->认证 下面需要勾选的复选框(获取 ...

  2. RJM8L151F6P6温度枪方案对比

    疫情当下,温度计.呼吸机.监护仪.制氧机等医疗产品的生产供应至关重要,红外温度计属于非接触式测温,它是利用物体热辐射与物体温度之间的关系来工作的. 红外测温仪是一种将红外技术与微电子技术相结合的新型温 ...

  3. NIO-WindowsSelectorImpl源码分析

    目录 NIO-WindowsSelectorImpl源码分析 目录 前言 初始化WindowsSelectorProvider 创建WindowsSelectorImpl WindowsSelecto ...

  4. JMeter接口测试-循环读取库的用户信息

    前言 如何实现循环读取数据库的用户信息,并传递到下一个登录请求呢,下面我们一起来学习吧!在之前我们已经学会了利用JMeter连接数据库了,具体操作可以看我之前的随笔JMeter接口测试-JDBC测试 ...

  5. pikachu-服务器端请求伪造SSRF(Server-Side Request Forgery)

    一.SSRF概述(部分内容来自pikachu平台) SSRF(Server-Side Request Forgery:服务器端请求伪造),其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功 ...

  6. C# NewtonJson Serialize and deserialize

    using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...

  7. eclipse中一个项目引用另一个项目的方法

    我们在开发的时候,有时候需要把一个大的项目打散,尤其是现在微服务的架构很流行,一个大的项目往往被拆成很多小的项目,而有的项目作为公共工程被独立出来,比如有个工程专门提供各种Util工具类,有的工程专门 ...

  8. 非常简洁简单的tcp socket库 XKSocket

    一个非常简洁简单的异步tcp socket库,主要就是分包的问题,处理组包,粘包等问题 非常适合新手:) 项目中带有使用示例. http://git.oschina.net/dreamzgj/XKSo ...

  9. mysql查询时不区分大小写

    一次偶然的机会,发现在登陆验证时,改变用户名的大小写,同样可以登录成功,这是由于,当时使用的mysql数据库对大小写不敏感,查询时总是能查询到数据.一番查找资料,给出的原因是:在创建数据库的时候,选择 ...

  10. 经济学人精读笔记7:动乱当道,你还想买LV吗?

    2020/2/24 经济学人精读笔记7:动乱当道,你还想买LV吗? 标签(空格分隔): 经济学人 Part 1 Luxury goods A tale of two handbags Purveyor ...