题面

还以为是差分约束,原来拓扑排序也能解决这样的问题=。=

类似差分约束的建图方式,我们把大小关系看做有向边。这样一来图上是不允许存在环的,于是我们可以做拓扑排序。然后问题来了,边数非常大,根本建不出图来=。=

不过我们有一个套路的做法,为每个区间配一个虚点,然后连边时先连到虚点再连到各个目标点。然后问题又来了,这样连边其实是$O(len^2)$的,$len$为区间长度,如果有个很大的区间这就萎了=。=

那什么东西解决区间问题好用呢?线段树— —我们用线段树优化建图,每次直接从虚点连到区间上,这样最多会连出来$k+klog$ $n$条边(点向虚点连的+虚点向区间连的),然后线段树内还有$4*n$条边,总共大概有不到570万条边,还可以接受。再之后做拓扑排序就可以了

注意数值的最大值和连边时的边权

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,maxx=1e9;
int num[N],ls[N],rs[N];
int vis[N],ins[N],dp[N],mem[N],que[N];
int p[N],noww[M],goal[M],val[M],deg[N];
int n,s,m,l,r,k,f,b,rd,t1,t2,t3,tn,cnt,tot,pos;
void GG(){printf("NIE"),exit();}
void link(int f,int t,int v)
{
noww[++cnt]=p[f],p[f]=cnt;
goal[cnt]=t,val[cnt]=v,deg[t]++;
}
void Create(int nde,int l,int r)
{
if(l==r) num[l]=nde;
else
{
int mid=(l+r)/;
ls[nde]=++tot,rs[nde]=++tot;
link(nde,ls[nde],),link(nde,rs[nde],);
Create(ls[nde],l,mid),Create(rs[nde],mid+,r);
}
}
void Change(int nde,int l,int r,int nl,int nr,int task)
{
if(l>nr||r<nl)
return ;
else if(l>=nl&&r<=nr)
link(task,nde,);
else
{
int mid=(l+r)/;
Change(ls[nde],l,mid,nl,nr,task);
Change(rs[nde],mid+,r,nl,nr,task);
}
}
bool DFS(int nde)
{
vis[nde]=ins[nde]=true;
for(int i=p[nde];i;i=noww[i])
{
if(ins[goal[i]]) return false;
if(!vis[goal[i]]&&!DFS(goal[i])) return false;
}
ins[nde]=false; return true;
}
int main ()
{
scanf("%d%d%d",&n,&s,&m);
Create(tot=,,n),b=-;
for(int i=;i<=s;i++)
{
scanf("%d%d",&pos,&rd);
mem[num[pos]]=rd;
}
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
int last=t1; tot++;
for(int j=;j<=t3;j++)
{
scanf("%d",&rd); link(num[rd],tot,);
if(last<rd) Change(,,n,last,rd-,tot);
last=rd+;
}
if(last<=t2) Change(,,n,last,t2,tot);
}
for(int i=;i<=tot;i++)
dp[i]=mem[i]?mem[i]:maxx;
for(int i=;i<=tot;i++)
{
if(!vis[i]&&!DFS(i)) GG();
if(!deg[i]) que[++b]=i;
}
while(f<=b)
{
if(dp[tn=que[f++]]<) GG();
for(int i=p[tn];i;i=noww[i])
{
if(dp[tn]-val[i]<mem[goal[i]]) GG();
dp[goal[i]]=min(dp[goal[i]],dp[tn]-val[i]);
if(!(--deg[goal[i]])) que[++b]=goal[i];
}
}
printf("TAK\n");
for(int i=;i<=n;i++) printf("%d ",dp[num[i]]);
return ;
}

解题:POI 2015 PUS的更多相关文章

  1. 解题:POI 2015 Pieczęć

    题面 发现好像没有什么好做法,那就模拟么=.= 以印章左上角的'x'为基准,记录印章上'x'的相对位置模拟.记录相对位置是因为可能有这种情况↓ 直接模拟是会漏掉的=.= #include<cst ...

  2. 解题:POI 2015 Kinoman

    题面 发现每种电影只在两场之间产生贡献(只有$pos$的一场的就在$[pos,n]$产生贡献).那么我们针对每个位置$i$求出这场电影下一次出现的位置$nxt[i]$,然后每次更新一下,求整个区间的最 ...

  3. [BZOJ 3747] [POI 2015] Kinoman【线段树】

    Problem Link : BZOJ 3747 题解:ZYF-ZYF 神犇的题解 解题的大致思路是,当区间的右端点向右移动一格时,只有两个区间的左端点对应的答案发生了变化. 从 f[i] + 1 到 ...

  4. Odwiedziny[POI 2015]

    题目描述 给定一棵n个点的树,树上每条边的长度都为1,第i个点的权值为a[i]. Byteasar想要走遍这整棵树,他会按照某个1到n的全排列b走n-1次,第i次他会从b[i]点走到b[i+1]点,并 ...

  5. [POI 2015]Kinoman

    Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...

  6. POI题解整合

    我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...

  7. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

  8. 2015 German Collegiate Programming Contest (GCPC 15) + POI 10-T3(12/13)

    $$2015\ German\ Collegiate\ Programming\ Contest\ (GCPC 15) + POI 10-T3$$ \(A.\ Journey\ to\ Greece\ ...

  9. [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告

    [NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...

随机推荐

  1. du命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/linuxnews/article/details/51207738 导读du命令是检查硬盘使用情况,统计文件或目录及子目录 ...

  2. scrapy笔记集合

    细读http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html 目录 Scrapy介绍 安装 基本命令 项目结构以及爬虫应用介绍 简单使用示例 选 ...

  3. webpack入门指南-step02

    webpack 安装 1)安装前的准备:webpack是基于node环境的项目,所以使用前必须先安装node和npm. 在安装 Webpack 前,你本地环境需要支持 node.js.如果电脑没有装过 ...

  4. web项目中nicedit富文本编辑器的使用

    web项目中nicedit富文本编辑器的使用 一.为什么要用富文本编辑器? 先说什么是富文本编辑器吧,普通的html中input或textarea标签只能进行简单的输入,而做不到其他的文本调整功能,甚 ...

  5. iOS开发学习-资源打包

    图片是被放到Images.xcassets中 1.部署版本在>=iOS8的时候,打包的资源包中的图片会被放到Assets.car 图片被压缩: 2.部署版本在<iOS8的时候,打包的资源包 ...

  6. 软件共享平台的NABCD

    Need: 我感觉我们这个软件很适合现在的大学生,特别是大一大二的学生,由于在大学里面学生都在各忙各的,学生遇到问题如果自己在网上查找,这就需要花费大量的时间,如果有了这个软件学生和老师都可以在这个平 ...

  7. 《大象Think in UML》阅读笔记之二

    Think in UML阅读笔记(二) 上一次读到面向对象和面向过程的区别和各自的优势,结合实例分析了面向过程在面对大数据的时候,已经不足以满足人们的需求,所以引入了面向对象,面向对象的方法把世界看做 ...

  8. Java jdbc链接 mySQL 写的crud

    1.JDBC(Java Data Base Connectivity java数据库连接)概念: 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编 ...

  9. 我的JAVA运算符理解

    基本概念 原码,反码,补码 只需要记住这几句就够了  1.二进制的最高位是符号位:0表示正数,1表示负数 2.正数的原码,反码,补码都一样 3.负数的反码=它的原码符号位不变,其他位取反 4.负数的补 ...

  10. java中static使用之静态方法注意点

    1.静态方法可以直接调用同类中的静态成员,但是不能直接调用非静态成员,这是为什么呢?大家想一下,静态成员在对象创建之前就要写入内存,所以它在内存中是实实在在的存在的,而非静态还不存在内存中,所以不能调 ...