【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. tree/pstree

    tree yum install tree 不指定路径的话直接显示当前目录的结构 加上-L 表示只显示到指定的目录层级 tree -L 2 ./

  2. 【概率论】1-2:计数方法(Counting Methods)

    title: [概率论]1-2:计数方法(Counting Methods) categories: Mathematic Probability keywords: Counting Methods ...

  3. linux密码忘记的处理步骤

    linux忘记密码 centos7忘记密码如何解决?进入到单用户模式下去修改root密码step 1:开机时按住向下箭头,选择第一个,按住e进入gurb界面:step 2:在编辑模式下找ro 修改为  ...

  4. 一个XP SP3调用0地址蓝屏BUG

    0x00 蓝屏的堆栈 在XP SP3上跑POC之后,一段时间之后会出现蓝屏,蓝屏的堆栈如下,可以看出是ACKData里面CALL了一个0指针导致的蓝屏 0x01 蓝屏原因 1 ETW(Event Tr ...

  5. spring boot jpa-java.lang.IllegalArgumentException: Not a managed type异常问题解决方法

    JPA实体类没有被扫描到,导致这样的情况有以下几种可能: 实体类没有加上@Entity注解 对应解决方法在实体类上加上@Entity即可解决问题 没有按照SpringBoot的约定,默认扫描(appl ...

  6. 蚁群算法求解TSP问题

    一.蚁群算法简介 蚁群算法是对自然界蚂蚁的寻径方式进行模似而得出的一种仿生算法:蚂蚁在运动过程中,能够在它所经过的路径上留下信息素(pheromone)的物质进行信息传递,而且蚂蚁在运动过程中能够感知 ...

  7. Infralution.Localization.Wpf

    WPF Localization Using RESX Files Once you have downloaded the source code and built it, add a refer ...

  8. 使用python获取微医数据

    用到的包: BeautifulSoup pymysql requests json 碰到的问题: 1.医生查询分页数据不能超过38页,超过无法返回数据 2.某些字段对应的html元素包含一些无效的cl ...

  9. C++ list 查找

    #include <iostream>#include <list>#include <algorithm> using namespace std; int ma ...

  10. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_23-CMS前端页面查询开发-分页查询实现

    修改为默认的参数 点击分页的事件 current-change 我们弹个alert测试下 看文档,参数是当前页 把当前页的数据赋值给params.page这个对象 分页效果实现 最终代码 <te ...