【Nowcoder71E】组一组(差分约束,最短路)
【Nowcoder71E】组一组(差分约束,最短路)
题面
题解
看到二进制显然就直接拆位,那么区间的按位或和按位与转成前缀和之后,可以写成两个前缀和的值的差的大小关系,那么直接差分约束就好了。
注意几个细节,首先相等是要两侧都要连边,不要直连了一侧;然后这题卡常,所以对于区间内全是一的情况,处理出哪些位置确定是一,然后求个前缀和,直接从\(0\)连过去,这样子可以优化大量时间。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define MAX 100100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,m,A[MAX],dis[MAX],d[MAX];
int L[MAX],R[MAX],X[MAX],O[MAX];
struct Line{int v,next,w;}e[MAX*5];
int h[MAX],cnt=1;
inline void Add(int u,int v,int w){e[cnt]=(Line){v,h[u],w};h[u]=cnt++;}
bool vis[MAX];
void SPFA()
{
queue<int> Q;for(int i=0;i<=n;++i)dis[i]=-1e9;
Q.push(0);dis[0]=0;vis[0]=true;
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=h[u];i;i=e[i].next)
if(dis[e[i].v]<dis[u]+e[i].w)
{
dis[e[i].v]=dis[u]+e[i].w;
if(!vis[e[i].v])vis[e[i].v]=true,Q.push(e[i].v);
}
vis[u]=false;
}
}
int main()
{
n=read();m=read();
for(int i=1;i<=m;++i)O[i]=read(),L[i]=read(),R[i]=read(),X[i]=read();
for(int i=0;i<20;++i)
{
for(int j=0;j<=n;++j)h[j]=d[j]=0;cnt=1;
for(int j=1;j<=m;++j)
if(O[j]==1)
{
if(X[j]&(1<<i))Add(L[j]-1,R[j],1);
else Add(L[j]-1,R[j],0),Add(R[j],L[j]-1,0);
}
else
{
if(X[j]&(1<<i))Add(L[j]-1,R[j],R[j]-L[j]+1),Add(R[j],L[j]-1,-R[j]+L[j]-1),++d[L[j]],--d[R[j]+1];
else Add(R[j],L[j]-1,L[j]-R[j]);
}
for(int j=1;j<=n;++j)Add(j-1,j,0);
for(int j=1;j<=n;++j)Add(j,j-1,-1);
for(int j=1;j<=n;++j)d[j]+=d[j-1];
for(int j=1;j<=n;++j)if(d[j])d[j]=1;
for(int j=1;j<=n;++j)d[j]+=d[j-1];
for(int j=1;j<=n;++j)Add(0,j,d[j]);
SPFA();
for(int j=1;j<=n;++j)A[j]|=(dis[j]-dis[j-1])*(1<<i);
}
for(int i=1;i<=n;++i)printf("%d ",A[i]);puts("");
return 0;
}
【Nowcoder71E】组一组(差分约束,最短路)的更多相关文章
- 牛客Wannafly9E 组一组 差分约束
正解:差分约束 解题报告: 传送门! 首先肯定要想到把他们分开来考虑,就是说,把数二进制拆分掉,这样就可以分开考虑了嘛 然后考虑设f[i]:前i个数中的1的个数 然后就可以得到一堆差分约束的式子 然后 ...
- POJ 3159 Candies(差分约束+最短路)题解
题意:给a b c要求,b拿的比a拿的多但是不超过c,问你所有人最多差多少 思路:在最短路专题应该能看出来是差分约束,条件是b - a <= c,也就是满足b <= a + c,和spfa ...
- POJ 3169 Layout(差分约束+最短路)题解
题意:有一串数字1~n,按顺序排序,给两种要求,一是给定u,v保证pos[v] - pos[u] <= w:二是给定u,v保证pos[v] - pos[u] >= w.求pos[n] - ...
- [CCPC2019 哈尔滨] A. Artful Paintings - 差分约束,最短路
Description 给 \(N\) 个格子区间涂色,有两类限制条件 区间 \([L,R]\) 内至少 \(K\) 个 区间 \([L,R]\) 外至少 \(K\) 个 求最少要涂多少个格子 Sol ...
- Layout---poj3169(差分约束+最短路spfa)
题目链接:http://poj.org/problem?id=3169 有n头牛站成一排 在他们之间有一些牛的关系比较好,所以彼此之间的距离不超过一定距离:也有一些关系不好的牛,希望彼此之间的距离大于 ...
- poj3159 差分约束 spfa
//Accepted 2692 KB 1282 ms //差分约束 -->最短路 //TLE到死,加了输入挂,手写queue #include <cstdio> #include & ...
- 【牛客网71E】 组一组(差分约束,拆位)
传送门 NowCoder Solution 考虑一下看到这种区间或与区间与的关系,拆一下位. 令\(s_i\)表示前缀和,则: 那么如果现在考虑到了第\(i\)为,有如下4种可能: \(opt=1\) ...
- 【10.9校内练习赛】【搜索】【2-sat】【树链剖分】【A_star k短路】【差分约束+判负环】
在洛谷上复制的题目! P3154 [CQOI2009]循环赛 题目描述 n队伍比赛,每两支队伍比赛一次,平1胜3负0. 给出队伍的最终得分,求多少种可能的分数表. 输入输出格式 输入格式: 第一行包含 ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
随机推荐
- pdf转eps后存在大片空白的处理
之前pdf转eps的方式是用acrobat直接转,发现每次转完后,图片都显示在一张A4纸上,插入到论文中时会出现大片空白:但在pdf中是没有这么多空白的,与裁剪没关系. 后来在 http://tex. ...
- Linux下查看文件系统磁盘使用
[root@localhost ~]# df -h 可以查看所有文件系统的磁盘使用情况 du --max-depth=1 -h 可以查看当前目录下各子目录的磁盘使用情况 参考:http://www.2 ...
- bootstrap简单使用
Bootstrap (版本 v3.3.7) 官网教程: https://v3.bootcss.com/css/ row——行 row——列 push——推 pull——拉 col-md-o ...
- windows下linux子系统安装
1.打开Windows功能中的使用于linux的Windows子系统 2.应用商店中下载需要的linux 3.下载完成后运行等待安装并输入用户名密码 4.查看系统信息 先后 sudo apt-get ...
- 区块链教程(二):比特币、区块链、以太坊、Hyperledger的关系
不知道大家喜不喜欢音乐! 朋克音乐:诞生于七十年代中期,一种源于六十年代车库摇滚和前朋克摇滚的简单摇滚乐.它由一个简单悦耳的主旋律和三个和弦组成,经过演变,朋克已经逐渐脱离摇滚,成为一种独立的音乐,朋 ...
- scp复制文件到远程服务器上
scp -P 22 -r 2028792_www root@120.79.172.45:/usr/local/src Linux scp命令用于Linux之间复制文件和目录. scp是 secure ...
- 如何在TypeScript中使用第三方JavaScript框架
一.安装typings 使用npm全局安装typings :npm install -g typings 安装成功. 二,搜索资源,支持模糊搜索:typings search base64 三.安装t ...
- 解决方法:CentOS7用yum安装软件显示错误:cannot find a valid baseurl for repo: base/7/x86_64
在Linux学习中,发现使用yum安装软件出现以下的错误: 百度了各种方法,很多人也发现光是修改REBOOT=yes也没用,多次进行挂载.修改网卡配置文件.重置IP地址.重启网络.创建又删除配置文件的 ...
- python学习笔记(11)--文件与数据格式化
文件的概念: 文件是数据的抽象和集合,是存储在辅助存储器上的数据序列,文件是数据存储的一种形式,文件的展现形态,文本文件和二进制文件. 文本文件输出: f.txt文件保存:“我是中国人” >&g ...
- vue element-ui 绑定@keyup事件无效
解决办法: <el-input @keyup.native="ajax"></el-input> 加上.native覆盖原有封装的keyup事件即可