BZOJ 2330 - 差分约束系统
题目分析
差分约束 这里做个简单介绍:形如\(x_i - x_j >= d\)的不等式,可以联想到我们求最短路时\(d_v <= d_u + len\),则上式可以变形为\(x_i >= x_j + d\)即连一条j->i的长度为d的边并跑最长路,dis[i]则是满足条件的最小解(因为上面等式采用的>=号,所以求出的时最小解,同理当变形为\(x_j <= x_i - d\) 采用<= 时求出的是最大解)。
转差分约束
这道题也是经典的差分约束,只是要注意几个问题:
- spfa判负环 无解
- 输入矛盾条件时直接无解
code
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
const ll OO = 0x3f3f3f3f;
int times[N];
int n, k;
ll dis[N];
int ecnt, adj[N], go[N << 2], nxt[N << 2], len[N << 2];
bool vst[N];
inline void addEdge(int u, int v, int l){
nxt[++ecnt] = adj[u], adj[u] = ecnt, go[ecnt] = v, len[ecnt] = l;
}
inline int read(){
int i = 0, f = 1;char ch = getchar();
for(; (ch < '0' || ch > '9') && ch != '-'; ch = getchar());
if(ch == '-') ch = getchar(), f = -1;
for(; ch >= '0' && ch <= '9'; ch = getchar())
i = (i << 3) + (i << 1) + (ch - '0');
return i * f;
}
inline void wr(ll x){
if(x < 0) putchar('-'), x = -x;
if(x > 9) wr(x / 10);
putchar(x % 10 + '0');
}
inline bool spfa(){
static int que[N], qn;
for(int i = 1; i <= n; i++) dis[i] = -OO;
dis[0] = 0;
que[qn = 1] = 0;
vst[0] = true;
for(int ql = 1; ql <= qn; ql++){
int u = que[ql];
vst[u] = false;
times[u]++;
if(times[u] == n) return false;
for(int e = adj[u]; e; e = nxt[e]){
int v = go[e];
if(dis[v] < dis[u] + len[e]){
dis[v] = dis[u] + len[e];
if(!vst[v]) vst[v] = true, que[++qn] = v;
}
}
}
return true;
}
int main(){
n = read(), k = read();
for(int i = n; i >= 1; i--) addEdge(0, i, 1);
for(int i = 1; i <= k; i++){
int x = read(), a = read(), b = read();
switch(x){
case 1:{
if(a != b){
addEdge(a, b, 0);
addEdge(b, a, 0);
}
break;
}
case 2:{
if(a == b){
printf("-1");
return 0;
}
addEdge(a, b, 1);
break;
}
case 3:{
if(a != b)
addEdge(b, a, 0);
break;
}
case 4:{
if(a == b){
printf("-1");
return 0;
}
addEdge(b, a, 1);
break;
}
case 5:{
if(a != b)
addEdge(a, b, 0);
break;
}
default: break;
}
}
if(!spfa()){
printf("-1");
return 0;
}
ll ans = 0;
for(int i = 1; i <= n; i++){
ans += dis[i];
}
wr(ans);
return 0;
}
BZOJ 2330 - 差分约束系统的更多相关文章
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- bzoj 2330 [SCOI2011]糖果(差分约束系统)
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3574 Solved: 1077[Submit][Status ...
- BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA
最小值求最长路. 最大值求最短路. 发现每个约束条件可以转化为一条边,表示一个点到另外一个点至少要加上一个定值. 限定了每一个值得取值下界,然后最长路求出答案即可. 差分约束系统,感觉上更像是两个变量 ...
- BZOJ 2330 糖果 差分约束求最小值
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2330 题目大意: 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果 ...
- bzoj 4500: 矩阵 差分约束系统
题目: Description 有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作: 选择一行, 该行每个格子的权值加1或减1. 选择一列, 该列每个格子的权值加1或减1. 现在有K ...
- bzoj2330: [SCOI2011]糖果 差分约束系统
幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候 ...
- Bzoj1202/洛谷P2294 [HNOI2005]狡猾的商人(带权并查集/差分约束系统)
题面 Bzoj 洛谷 题解 考虑带权并查集,设\(f[i]\)表示\(i\)的父亲(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]} ...
- [BZOJ2330][SCOI2011]糖果 差分约束系统+最短路
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2330 类似于题目中这种含有不等式关系,我们可以建立差分约束系统来跑最长路或最短路. 对于一 ...
- UVA11478 Halum [差分约束系统]
https://vjudge.net/problem/UVA-11478 给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的 ...
随机推荐
- 原生js大总结七
061.如何获取父级节点.上一个子级节点.下一个子级节点 nextElementSibling 后一个兄弟元素 (如果没有是null) previousElementSibling ...
- Android检测网络状态,判断当前网络是否可用
用户手机当前网络可用:WIFI.2G/3G网络,用户打开与不打开网络,和是否可以用是两码事.可以使用指的是:用户打开网络了并且可以连上互联网进行上网. 检测当前网络是否可用,代码如下: /** * 检 ...
- 【转】CentOS/RHEL/OracleLinux使用UDEV配置ASMDISK
转自:http://blog.csdn.net/staricqxyz/article/details/8332566 RHEL 5 / CentOS 5 / Oracle Linux 5 [root@ ...
- Dynamic device virtualization
A system and method for providing dynamic device virtualization is herein disclosed. According to on ...
- 关于Altium Designer的一些设置
把原理图设置成A4纸张,是为了便于打印机打印出原理图来 原理图一定一定要和pcb图保持一致,这样是为了以后查找错误方便...
- [原]MFC中DIALOG(对话框)程序响应加速键(快捷键)
[原]MFC中DIALOG(对话框)程序响应加速键(快捷键) 2014-8-6阅读266 评论0 新建一个对话框程序,项目名为Test,删除默认确定,取消和静态文本框控件.添加一个按钮,Caption ...
- 自己写的关于生产者与消费者模式,还有定时任务的demo
为了加深对生产者消费者模式的理解,特意写了这个demo,里面还包含了一个自己写的定时任务.代码下载地址:http://download.csdn.net/detail/li_yan_fei/98115 ...
- [TypeStyle] Generate static css + html files using TypeStyle
You can easily use TypeStyle to build static html files with encapsulated CSS. You can use this patt ...
- php 转义html标签 反转html标签 符号
$a = '<strong>123</strong>'; //假设这是html代码$b = htmlspecialchars($a); //将< ...
- [Angular] Test component template
Component: import { Component, Input, ChangeDetectionStrategy, EventEmitter, Output } from '@angular ...