题面

传送门

题解

先考虑暴力怎么做,我们把所有\(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;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10555370.html

洛谷P3588 [POI2015]PUS(线段树优化建图)相关推荐

  1. 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】

    题意:有nnn个武器和mmm个飞船,武器有下面三种 从给定的集合SSS中击破一个. 在给定的区间[L,R][L,R][L,R]中击破一个. 对于给定的a,b,ca,b,ca,b,c,选择000个或22 ...

  2. Codeforces 786B Legacy (线段树优化建图)

    Codeforces 786B Legacy (线段树优化建图) 题意:\(n\)个点,有\(3\)种连边操作:1.将\(u\)指向\(v\):2.将\(v\)指向编号在区间\([l,r]\)的点:3 ...

  3. 线段树优化建图详解——区间连边之技巧,吊打紫题之利器

    我们从一道例题开始. CF786B Description Solution 朴素解法: 暴力连边+最短路 对于每次连边操作,我们逐一连边,最后在图上跑一遍单源最短路径算法即可. 时间复杂度 O ( ...

  4. Gym - 102174G 神圣的 F2 连接着我们 (线段树优化建图 + 多源最短路)

    Description 小白非常喜欢玩 "县际争霸" 这款游戏,虽然他的技术并不容乐观."县际争霸" 的地图共有两个县,每个县里各有 n n n 个据点.同一个 ...

  5. BZOJ.3218.a + b Problem(最小割ISAP 可持久化线段树优化建图)

    BZOJ UOJ 首先不考虑奇怪方格的限制,就是类似最大权闭合子图一样建图. 对于奇怪方格的影响,显然可以建一条边\((i\to x,p_i)\),然后由\(x\)向\(1\sim i-1\)中权值在 ...

  6. P6348 [PA2011]Journeys 线段树优化建图 区间连区间

    传送门 文章目录 题意: 思路: 题意: 每次连接[a,b][a,b][a,b]与[c,d][c,d][c,d]之间所有点,让后跑最短路. 思路: 比普通的优化建图能简单点,我们只需要加两个虚点之间边 ...

  7. CodeForces - 787D - Legacy(线段树优化建图+最短路)

    题目链接:点击查看 题目大意:给出 nnn 个点和 mmm 条边,现在需要求从 ststst 开始到所有点的最短路是多少,mmm 条边的给出方式如下: 1uvw1 \ u \ v \ w1 u v w ...

  8. P5025-[SNOI2017]炸弹【tarjan,线段树优化建图】

    正题 题目链接:https://www.luogu.com.cn/problem/P5025 题目大意 .nnn个炸弹,每个在xxx位置处,范围为rrr.定义fif_ifi​表示第iii个炸弹爆炸能连 ...

  9. CodeForces---787D:Legacy【线段树优化建图+最短路】

    题目: 戳这里啊~~~ 题意: 给你三种操作:(1)点到点建边:(2)点到区间建边:(3)区间到点建边:最后求起点到其他点的最短距离 分析: 最短距离无非建边跑Dijkstra即可,考虑如何对区间建边 ...

最新文章

  1. war包部署到tomcat的疑问
  2. Xamarin Essentials教程地理定位Geolocation
  3. 得到文件的服务器路径,如何获取服务器上的路径?
  4. Tensorflow【实战Google深度学习框架】基于tensorflow + Vgg16进行图像分类识别
  5. 《openssl编程》之基础知识
  6. Java中的数据类型及相互转换方法
  7. Jekyll 使用入门
  8. 【Angular 4】 Cannot find module 'rxjs-compat'
  9. eclipse配置项目部署到到本地tomcat
  10. Bootstrap-分页插件Paginator
  11. SQL Server 两个时间段的差and时间截取到时分
  12. 三合一交友盲盒系统微信小程序源码/免授权盲盒源码/脱单盲盒APP分销代理源码
  13. DB9接口公头母头引脚区别
  14. 条形码转化成二维码_免费在线条形码生成器_村美小站
  15. 【转】GIS:为什么我和别的软件不一样
  16. Lambert 投影转换相关代码
  17. 挖掘机液压控制系统实训QY-JXSX09
  18. TTL反相器 电路分析
  19. Python每日一练(23)-基于百度 AI 识别抓取的表情包
  20. MSR5560 路由器映射

热门文章

  1. 双语学习xml系列----之一 什么是xml?(第一小节)
  2. MD5算法之C#程序 MD5算法描述
  3. ES6新语法 变量 、 服务器端js和浏览器端js的区别
  4. 三维插值(MATLAB)——TriScatteredInterp/scatteredInterpolant函数
  5. TS Interface
  6. 7-192 素因子分解 (20 分)
  7. 7-95 倒数第N个字符串 (15 分)
  8. 采用分治法求一个整数序列中的最大值和最小值
  9. 华为鸿蒙系统自动驾驶,华为高阶自动驾驶 + 华为鸿蒙 OS 车机系统体验
  10. 调试maven源代码