[SCOI 2011]糖果
Description
给出 \(N\) 个节点,节点有正点权, \(K\) 个三元组 \((X,A,B)\) 来描述节点点权之间的关系。
- 如果 \(X=1\) , 表示 \(A\) 的点权必须和 \(B\) 的点权相等;
- 如果 \(X=2\) , 表示 \(A\) 的点权必须小于 \(B\) 的点权;
- 如果 \(X=3\) , 表示 \(A\) 的点权必须不小于 \(B\) 的点权;
- 如果 \(X=4\) , 表示 \(A\) 的点权必须大于 \(B\) 的点权;
- 如果 \(X=5\) , 表示 \(A\) 的点权必须不大于 \(B\) 的点权
问如何安排点权使点权和最小。
\(1\leq N,K\leq 100000\)
Solution
很显然是一个差分约束系统的模型。但值得注意的是由于题目是求最小值,所以构建的差分约束系统应该是建立在“最长路”的基础上的,所以不等号要用 \('\geq'\) 。
对于建图,我们记连一条有向边从 \(u\) 到 \(v\) 边权为 \(c\) 为 \((u,v,c)\) 。对于题中的五种情况:
- 如果 \(X=1\) , \((u,v,0), (v,u,0)\) ;
- 如果 \(X=2\) , \((u,v,1)\) ;
- 如果 \(X=3\) , \((v,u,0)\) ;
- 如果 \(X=4\) , \((v,u,1)\) ;
- 如果 \(X=5\) , \((u,v,0)\)
然后依旧是 \(dfs-SPFA\) 来做,但是好像卡 \(SPFA\) ,好像将超级源点建边顺序取反就好了...
Code
//It is made by Awson on 2018.2.4
#include <bits/stdc++.h>
#define LL long long
#define dob complex<double>
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N = 100000;
void read(int &x) {
char ch; bool flag = 0;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar());
for (x = 0; isdigit(ch); x = (x<<1)+(x<<3)+ch-48, ch = getchar());
x *= 1-2*flag;
}
void print(LL x) {if (x > 9) print(x/10); putchar(x%10+48); }
void write(LL x) {if (x < 0) putchar('-'); print(Abs(x)); }
int n, k, x, u, v;
struct tt {int to, next, cost; }edge[(N<<2)+5];
int path[N+5], top, vis[N+5], dist[N+5];
void add(int u, int v, int c) {
edge[++top].to = v, edge[top].cost = c, edge[top].next = path[u], path[u] = top;
}
bool dfs(int u) {
vis[u] = 1;
for (int i = path[u]; i; i = edge[i].next)
if (dist[edge[i].to] < dist[u]+edge[i].cost) {
if (vis[edge[i].to] != 0) return true;
dist[edge[i].to] = dist[u]+edge[i].cost;
if (dfs(edge[i].to)) return true;
}
vis[u] = 0;
return false;
}
void work() {
read(n), read(k);
for (int i = n; i >= 1; i--) add(0, i, 1);
for (int i = 1; i <= k; i++) {
read(x), read(u), read(v);
if (x == 1) add(u, v, 0), add(v, u, 0);
else if (x == 2) add(u, v, 1);
else if (x == 3) add(v, u, 0);
else if (x == 4) add(v, u, 1);
else add(u, v, 0);
}
if (dfs(0)) {puts("-1"); return; }
LL ans = 0;
for (int i = 1; i <= n; i++) ans += dist[i];
writeln(ans);
}
int main() {
work(); return 0;
}
[SCOI 2011]糖果的更多相关文章
- CDOJ 435 (SCOI 2011) 糖果 Label:差分约束系统
糖果 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 131072/131072KB (Java/Others) Submit Stat ...
- BZOJ 2330 SCOI 2011 糖果
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...
- 解题:SCOI 2011 糖果
题面 能把差分约束卡死的题,因为正解并不是差分约束,然而被我用一种奇怪的姿势过去了... 差分约束就是相等互相连零边,不超过/不低于从不多的一方向另一方连零边,超过/低于从少的一方向另一方连最小的边权 ...
- 【SCOI 2011】 糖果
[题目链接] 点击打开链接 [算法] 当x = 1时,连边(a,b,0)和(b,a,0) 当x = 2时,连边(a,b,1) 当x = 3时,连边(b,a,0) 当x = 4时,连边(b,a,1) 当 ...
- C++之路进阶——codevs2404(糖果)
2404 糖果 2011年省队选拔赛四川 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 幼儿园里有N个小朋友,l ...
- 洛谷P3275 [SCOI2011]糖果(差分约束)
题目描述 幼儿园里有 $N$ 个小朋友,$lxhgww $老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...
- 原生js可爱糖果数字时间特效
效果展示:http://hovertree.com/texiao/js/35/ 数字采用漂亮的糖果皮肤设计 效果图: 代码如下: <!DOCTYPE html> <html> ...
- [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)
正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3028 Solved: 1460[Submit][Sta ...
随机推荐
- Java字符编码浅析
Java基本类型占用的字节数:1字节: byte , boolean2字节: short , char4字节: int , float8字节: long , double注:1字节(byte)=8位( ...
- vim配置之taglist插件安装
上次说了不带插件的vim配置,今天补充两个,来日方长,不定期更新: 首先看一个路径: 下载ctags,将其中的ctags.exe复制到上边目录下边: 地址:https://sourceforge.ne ...
- django搭建web (一)
建立工程 django-admin.py startproject project_name 建立app python manage.py startapp app_name 将app添加进工程中 在 ...
- SQL语句取多列的最小值(排除0)
经常遇到获取数据表中多个列的最小值和最大值,例如: 获取这 4个价格的最小值和最大值: SELECT( SELECT min(minPrice) FROM ( VALUES (IIF(MarketSi ...
- OpenShift实战(一):OpenShift高级安装
1.1 服务器基本信息 本次安装采用一个master.5个node.3个etcd,node节点两块硬盘,60G磁盘用于docker storage,xxx改为自己的域名或主机名. 节点 功能 IP 内 ...
- vue下拉列表
最近在弄作品,做了个下拉列表.心想各位小哥哥.小姐姐可能会用到相同的需求,就把下拉列表封装一下,希望能对各位小哥哥,小姐姐有帮助 github地址:https://github.com/ClmPisc ...
- python多目录字符串查找匹配
1. 需求来自于实际工作: 需要处理一批服务器上运行的redis实例,每个redis实例可能有密码,也可能没有,有密码的,密码配置格式一定是: requirepass XXXXX # XXXX是密码 ...
- typescript简介
微软作为编译器狂魔一直有一个心病,就是改良JavaScript这种语法超级烂又很多人用的编程语言,于是TypeScript诞生了 先做个对比吧: TS JS 语法严谨性 严谨 宽松 静态性 静态 ...
- MongoDb进阶实践之五 MongoDB修改命令详述
一.引言 上一篇文章我们已经详细介绍了MongoDB数据库的有关查询的内容,但是这只是所有查询命令的冰山一角.所有查询命令都写完也没有必要,我只是写了一些常用的命令,对MongoDB的 ...
- Python内置函数(40)——dir
英文文档: dir([object]) Without arguments, return the list of names in the current local scope. With an ...