洛谷P3588 [POI2015]PUS(线段树优化建图)
题面
题解
先考虑暴力怎么做,我们把所有\(r-l+1-k\)中的点向\(x\)连有向边,表示\(x\)必须比它们大,那么如果这张图有环显然就无解了,否则的话我们跑一个多源最短路,每个点的\(dis\)就是它的答案
然而这里边数太多了,所以得线段树优化建边
//minamoto
#include<bits/stdc++.h>
#define R register
#define ls (p<<1)
#define rs (p<<1|1)
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
    R int res,f=1;R char ch;
    while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
    for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
    return res*f;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R int x){
    if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
    while(z[++Z]=x%10+48,x/=10);
    while(sr[++C]=z[Z],--Z);sr[++C]=' ';
}
const int N=5e5+5,M=1e7+5,lim=1e9;
struct eg{int v,nx,w;}e[M];int head[N],deg[N],tot;
inline void add(R int u,R int v,R int w){e[++tot]={v,head[u],w},head[u]=tot,++deg[v];}
int vis[N],dis[N],dfn[N],a[N],q[N];
int cnt,n,s,m,h,t;
void build(int p,int l,int r){
	if(l==r)return dfn[p]=l,void();
	int mid=(l+r)>>1;dfn[p]=++cnt;
	build(ls,l,mid),build(rs,mid+1,r);
	add(dfn[ls],dfn[p],0),add(dfn[rs],dfn[p],0);
}
void link(int p,int l,int r,int ql,int qr,int x){
	if(ql<=l&&qr>=r)return add(dfn[p],x,0),void();
	int mid=(l+r)>>1;
	if(ql<=mid)link(ls,l,mid,ql,qr,x);
	if(qr>mid)link(rs,mid+1,r,ql,qr,x);
}
int main(){
//	freopen("testdata.in","r",stdin);
	cnt=n=read(),s=read(),m=read();
	build(1,1,n);
	for(R int i=1,k,x;i<=s;++i)k=read(),x=read(),a[k]=dis[k]=x;
	for(R int T=1,l,r,k,las,x;T<=m;++T){
		l=read(),r=read(),k=read(),las=l-1,++cnt;
		while(k--)x=read(),add(cnt,x,1),(x>las+1)?(link(1,1,n,las+1,x-1,cnt),0):0,las=x;
		x<r?(link(1,1,n,x+1,r,cnt),0):0;
	}
	h=1,t=0;
	fp(i,1,cnt)!dis[i]?dis[i]=1:0,!deg[i]?q[++t]=i:0;
	while(h<=t){
		int u=q[h++];vis[u]=1;
		go(u)if(cmax(dis[v],dis[u]+e[i].w),!--deg[v]?q[++t]=v:0,a[v]&&dis[v]>a[v])return puts("NIE"),0;
	}
	fp(i,1,cnt)if(!vis[i]||dis[i]>lim)return puts("NIE"),0;
	puts("TAK");
	fp(i,1,n)print(dis[i]);
	return Ot(),0;
}
洛谷P3588 [POI2015]PUS(线段树优化建图)的更多相关文章
- [POI2015]PUS [线段树优化建图]
		problem 线段树优化建图,拓扑,没了. #include <bits/stdc++.h> #define ls(x) ch[x][0] #define rs(x) ch[x][1] ... 
- BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序
		BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序 Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息 ... 
- 【bzoj4383】[POI2015]Pustynia  线段树优化建图+差分约束系统+拓扑排序
		题目描述 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r,k以及接下来k个正整数,表示a[l],a[l+1],...,a[r- ... 
- 洛谷P3588 [POI2015]PUS
		题面 sol:说了是线段树优化建图的模板... 就是把一整个区间的点连到一个点上,然后用那个点来连需要连一整个区间的点就可以了,就把边的条数优化成n*log(n)了 #include <queu ... 
- 洛谷3783 SDOI2017 天才黑客(最短路+虚树+边转点+线段树优化建图)
		成功又一次自闭了 怕不是猪国杀之后最自闭的一次 一看到最短路径. 我们就能推测这应该是个最短路题 现在考虑怎么建图 根据题目的意思,我们可以发现,在本题中,边与边之间存在一些转换关系,但是点与点之间并 ... 
- BZOJ5017 [SNOI2017]炸弹 - 线段树优化建图+Tarjan
		Solution 一个点向一个区间内的所有点连边, 可以用线段树优化建图来优化 : 前置技能传送门 然后就得到一个有向图, 一个联通块内的炸弹可以互相引爆, 所以进行缩点变成$DAG$ 然后拓扑排序. ... 
- 【BZOJ3681】Arietta 树链剖分+可持久化线段树优化建图+网络流
		[BZOJ3681]Arietta Description Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中.但是她从未停止过和恋人 Velding 的书信往来.一 ... 
- 【ARC069F】Flags 2-sat+线段树优化建图+二分
		Description  数轴上有 n 个旗子,第 ii 个可以插在坐标 xi或者 yi,最大化两两旗子之间的最小距离. Input  第一行一个整数 N.  接下来 N 行每行两个整数 xi, ... 
- 【bzoj5017】[Snoi2017]炸弹  线段树优化建图+Tarjan+拓扑排序
		题目描述 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足: Xi−Ri≤Xj≤Xi+Ri,那么,该炸弹也会被引爆. 现在 ... 
- 【bzoj4699】树上的最短路(树剖+线段树优化建图)
		题意 给你一棵 $n$ 个点 $n-1$ 条边的树,每条边有一个通过时间.此外有 $m$ 个传送条件 $(x_1,y_1,x_2,y_2,c)$,表示从 $x_1$ 到 $x_2$ 的简单路径上的点可 ... 
随机推荐
- Camera & Render
			1.void Render(); Description Render the camera manually. This will render the camera. It will use th ... 
- java实现文件的拷贝以及文件的删除
			/** * 将文件拷贝到指定目录 * @param oldAddress 文件所在目录(文件的全路径) * @param newAddress 指定目录(包含复制文件的全名称) * @throws E ... 
- 《Android Studio实用指南》4.27 使用演示模式
			本文节选自<Android Studio实用指南> 第4章第27节 作者: 毕小朋 目前本书已上传到百度阅读, 在百度中搜索[Anroid Studio实用指南]便可以找到本书. 什么是演 ... 
- freemaker 课程
			品优购电商系统开发 第12章 网页静态化解决方案-Freemarker 传智播客.黑马程序员 1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运 ... 
- 电商项目面试题  及mysql面试题  太难没啥用
			需要按照功能点把系统拆分,拆分成独立的功能.单独为某一个节点添加服务器.需要系统之间配合才能完成整个业务逻辑.叫做分布式.集群:同一个工程部署到多台服务器上.优点:1.把模块拆分,使用接口通信,降低模 ... 
- java的集合框架详解
			前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Jav ... 
- SQL基础问题(一)
			1.sql是什么? 结构化查询语言(Structured Query Language). 2.结构化查询语言的分类? 数据定义语言(DDL)Data Definition Language 操作 ... 
- linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):
			对万国语的地名进行翻译和检索 经过 前三篇的调试,已经有了一个完整的Map可以浏览,我们痛苦的世界范围数据下载.导入过程也结束了.要提醒一下的是,鉴于网速,不要下载 planetosm.lastest ... 
- [Training Video - 3] [Groovy in Detail] What is a groovy class ?
			log.info "starting" // we use class to create objects of a class Planet p1 = new Planet() ... 
- Android开发adb环境配置
			adb的全称为Android Debug Bridge,就是起到调试桥的作用. 在命令行cmd中打开adb,如果Android开发的环境配置有误,会出现如下错误提示: 解决方法,右键我的电脑-> ... 
