【51nod】2564 格子染色

这道题原来是网络流……

感觉我网络流水平不行……

这种只有两种选择的可以源点向该点连一条容量为b的边,该点向汇点连一条容量为w的边,如果割掉了b证明选w,如果割掉了w证明选b

那么\(p\)的限制怎么加呢,新建一个点\(i'\),然后\(i\)往\(i'\)流一条容量为\(p\)的边

\(i'\)再向所有不合法的\(j\)连一条容量为正无穷的边,这样如果\(i\)选了\(b\),\(j\)选了\(w\),会有水流从\(i\rightarrow i' \rightarrow j\)

由于\(n^2\)的边太多了,我们用可持久化线段树优化建图可以改成\(O(n \log n)\)

最后的答案是每个点黑白价值的和减去最大流

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define ba 47
#define MAXN 200005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
struct node {
int to,next,cap;
}E[MAXN * 10];
int head[MAXN],sumE = 1;
int N,S,T;
int dis[MAXN],Ncnt,cur[MAXN];
int a[5005],b[5005],w[5005],l[5005],r[5005],p[5005];
int val[5005],tot;
queue<int> Q;
void add(int u,int v,int c) {
E[++sumE].to = v;
E[sumE].cap = c;
E[sumE].next = head[u];
head[u] = sumE;
}
void addtwo(int u,int v,int c) {
add(u,v,c);add(v,u,0);
}
bool BFS() {
memset(dis,0,sizeof(dis));
while(!Q.empty()) Q.pop();
dis[S] = 1;
Q.push(S);
while(!Q.empty()) {
int u = Q.front();
Q.pop();
for(int i = head[u] ; i ; i = E[i].next) {
int v = E[i].to;
if(!dis[v] && E[i].cap > 0) {
dis[v] = dis[u] + 1;
if(v == T) return true;
Q.push(v);
}
}
}
return false;
}
int dfs(int u,int aug) {
if(u == T) return aug;
for(int &i = cur[u] ; i ; i = E[i].next) {
int v = E[i].to;
if(E[i].cap && dis[v] == dis[u] + 1) {
int t = dfs(v,min(aug,E[i].cap));
if(t) {
E[i].cap -= t;
E[i ^ 1].cap += t;
return t;
}
}
}
return 0;
}
int Dinic() {
int res = 0;
while(BFS()) {
for(int i = 1 ; i <= Ncnt ; ++i) cur[i] = head[i];
while(int d = dfs(S,0x7fffffff)) res += d;
}
return res;
}
int lc[MAXN],rc[MAXN],rt[5005],nw;
void Insert(int x,int &y,int l,int r,int pos,int v) {
y = ++Ncnt;
addtwo(y,x,2e9);
lc[y] = lc[x];rc[y] = rc[x];
if(l == r) {addtwo(y,v,2e9);return;}
int mid = (l + r) >> 1;
if(pos <= mid) {
Insert(lc[x],lc[y],l,mid,pos,v);
addtwo(y,lc[y],2e9);
}
else {
Insert(rc[x],rc[y],mid + 1,r,pos,v);
addtwo(y,rc[y],2e9);
}
}
void addE(int y,int l,int r,int ql,int qr) {
if(!y) return;
if(l == ql && qr == r) {addtwo(nw,y,2e9);return;}
int mid = (l + r) >> 1;
if(qr <= mid) addE(lc[y],l,mid,ql,qr);
else if(ql > mid) addE(rc[y],mid + 1,r,ql,qr);
else {addE(lc[y],l,mid,ql,mid);addE(rc[y],mid + 1,r,mid + 1,qr);}
}
void Solve() {
read(N);S = N + 1;T = N + 2;Ncnt = N + 2;
int res = 0;
for(int i = 1 ; i <= N ; ++i) {
read(a[i]);read(b[i]);read(w[i]);read(l[i]);read(r[i]);read(p[i]);
addtwo(S,i,b[i]);addtwo(i,T,w[i]);
res += w[i] + b[i];
val[++tot] = a[i];
}
sort(val + 1,val + tot + 1);
tot = unique(val + 1,val + tot + 1) - val - 1;
for(int i = 1 ; i <= N ; ++i) {
nw = ++Ncnt;
addtwo(i,nw,p[i]);
int s = lower_bound(val + 1,val + tot + 1,l[i]) - val;
int t = upper_bound(val + 1,val + tot + 1,r[i]) - val - 1;
if(s <= t) addE(rt[i - 1],1,tot,s,t);
s = lower_bound(val + 1,val + tot + 1,a[i]) - val;
Insert(rt[i - 1],rt[i],1,tot,s,i);
}
res -= Dinic();
out(res);enter;
}
int main(){
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

【51nod】2564 格子染色的更多相关文章

  1. Codevs 1744 格子染色==BZOJ 1296 粉刷匠

    1744 格子染色  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 有 n 条木板需要被粉 ...

  2. 【51nod】1655 染色问题

    题解 首先每个颜色出现的次数应该是一样的 \(\frac{C_{n}^{2}}{n} = \frac{n - 1}{2}\) 所以n如果是偶数那么就无解了 然后我们需要让每个点连颜色不同的四条边 只要 ...

  3. 51nod 1448 二染色问题 (逆向考虑)

    题目: 注意,这题不是把一块区域的黑翻成白.白翻成黑. 是把一块区域全部翻成白或者翻成黑. 初始为全白,看能否翻出题中的情况. 我们假设翻转若干次能得到图中的形状,那么我们找出最后一次的翻转,即全W或 ...

  4. 【51nod 1824】染色游戏

    题目 有 n 个红球, m 个蓝球,从中取出 x 个红球和 y 个蓝球排成一排的得分是 rx⋅by ,其中 r0=b0=1 . 定义 f(t) 表示恰好取出 t 个球排成一排的所有可能局面的得分之和. ...

  5. 1050 棋盘染色 2 - Wikioi

    题目描述 Description 有一个5*N的棋盘,棋盘中的一些格子已经被染成了黑色,你的任务是对最少的格子染色,使得所有的黑色能连成一块. 输入描述 Input Description 第一行一个 ...

  6. MT【241】红蓝两色染色

    用红蓝两色给$3*3$的格子染色,要求每行每列每种颜色都有,则不同的染色方法_____ 分析:按红色格子数分类,1)红色3或者6个有6种.2)红色4或者5个有45种.故一共有2*(6+45)=102种 ...

  7. poj1681 Painter's Problem(高斯消元法,染色问题)

    题意: 一个n*n 的木板 ,每个格子 都 可以 染成 白色和黄色,( 一旦我们对也个格子染色 ,他的上下左右都将改变颜色): 给定一个初始状态 , 求将 所有的 格子 染成黄色 最少需要染几次?  ...

  8. [CodeVs1050]棋盘染色2(状态压缩DP)

    题目大意:有一个5*N(≤100)的棋盘,棋盘中的一些格子已经被染成了黑色,求最少对多少格子染色,所有的黑色能连成一块. 这题卡了我1h,写了2.6k的代码,清明作业一坨还没做啊...之前一直以为这题 ...

  9. 牛客网 提高组第8周 T1 染色

    染色 链接: https://ac.nowcoder.com/acm/contest/176/A 来源:牛客网 题目描述 \(\tt{fizzydavid}\)和\(\tt{leo}\)有\(n\)个 ...

随机推荐

  1. php安装扩展的地址

    1 查看扩展 phpinfo  or extention_loads  or php -m 下载扩展地址 http://pecl.php.net     or http://windows.php.n ...

  2. codeforces#1290E2 - Rotate Columns (hard version)(子集dp)

    题目链接: https://codeforces.com/contest/1209/problem/E2 题意: 给出$n$行和$m$列 每次操作循环挪动某列一次 可以执行无数次这样的操作 让每行最大 ...

  3. CentOS 安装 MySQL PDO 扩展

    yum install php-pdo_mysql sudo service php-fpm restart

  4. AtomicInteger原理

    AtomicInteger的原理 java的并发原子包里面提供了很多可以进行原子操作的类,比如: AtomicInteger AtomicBoolean AtomicLong AtomicRefere ...

  5. pwn学习日记Day12 《程序员的自我修养》读书笔记

    目标文件里有什么 ELF各段 代码段 text 数据段 data bss段 只读数据段 rodata 注释信息段 comment 堆栈提示段 .note.GNU-stack comment 存放编译器 ...

  6. 阿里云上搭建git

    这篇文章我就来介绍一下如何在一台全裸的阿里云主机上搭建自己的git服务器. 1. 安装git 首先安装git,一般而言,现在的服务器已经内置了git安装包,我们只需要执行简单的安装命令即可安装.比如: ...

  7. 【原创】smarty引擎下的导航按钮高亮实现

    <?php$_nvaarr = array( array('name'=>'首页','url'=>'company.php?id='), array('name'=>'公司介绍 ...

  8. 05-06 Flutter JSON和序列化反序列化、创建模型类转换Json数据、轮播图数据渲染:Flutter创建商品数据模型 、请求Api接口渲染热门商品 推荐商品

    Config.dart class Config{ static String domain='http://jd.itying.com/'; } FocusModel.dart class Focu ...

  9. linux简单命令8---用户登录查看命令

    ---------------------------------------------------------------------------------------------------- ...

  10. [转]js禁止微信浏览器下拉显示黑底查看网址,不影响内部Scroll

    原贴:https://www.cnblogs.com/jasonwang2y60/p/6848464.html 原贴:https://www.cnblogs.com/jasonwang2y60/p/6 ...