Description

题库链接

给出 \(N\) 个节点,节点有正点权, \(K\) 个三元组 \((X,A,B)\) 来描述节点点权之间的关系。

  1. 如果 \(X=1\) , 表示 \(A\) 的点权必须和 \(B\) 的点权相等;
  2. 如果 \(X=2\) , 表示 \(A\) 的点权必须小于 \(B\) 的点权;
  3. 如果 \(X=3\) , 表示 \(A\) 的点权必须不小于 \(B\) 的点权;
  4. 如果 \(X=4\) , 表示 \(A\) 的点权必须大于 \(B\) 的点权;
  5. 如果 \(X=5\) , 表示 \(A\) 的点权必须不大于 \(B\) 的点权

问如何安排点权使点权和最小。

\(1\leq N,K\leq 100000\)

Solution

很显然是一个差分约束系统的模型。但值得注意的是由于题目是求最小值,所以构建的差分约束系统应该是建立在“最长路”的基础上的,所以不等号要用 \('\geq'\) 。

对于建图,我们记连一条有向边从 \(u\) 到 \(v\) 边权为 \(c\) 为 \((u,v,c)\) 。对于题中的五种情况:

  1. 如果 \(X=1\) , \((u,v,0), (v,u,0)\) ;
  2. 如果 \(X=2\) , \((u,v,1)\) ;
  3. 如果 \(X=3\) , \((v,u,0)\) ;
  4. 如果 \(X=4\) , \((v,u,1)\) ;
  5. 如果 \(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]糖果的更多相关文章

  1. CDOJ 435 (SCOI 2011) 糖果 Label:差分约束系统

    糖果 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 131072/131072KB (Java/Others) Submit Stat ...

  2. BZOJ 2330 SCOI 2011 糖果

    2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...

  3. 解题:SCOI 2011 糖果

    题面 能把差分约束卡死的题,因为正解并不是差分约束,然而被我用一种奇怪的姿势过去了... 差分约束就是相等互相连零边,不超过/不低于从不多的一方向另一方连零边,超过/低于从少的一方向另一方连最小的边权 ...

  4. 【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) 当 ...

  5. C++之路进阶——codevs2404(糖果)

    2404 糖果 2011年省队选拔赛四川  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 幼儿园里有N个小朋友,l ...

  6. 洛谷P3275 [SCOI2011]糖果(差分约束)

    题目描述 幼儿园里有 $N$ 个小朋友,$lxhgww $老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...

  7. 原生js可爱糖果数字时间特效

    效果展示:http://hovertree.com/texiao/js/35/ 数字采用漂亮的糖果皮肤设计 效果图: 代码如下: <!DOCTYPE html> <html> ...

  8. [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)

    正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...

  9. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3028  Solved: 1460[Submit][Sta ...

随机推荐

  1. php设计模式八-----装饰器模式

    1.介绍: 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  2. C语言函数嵌套调用作业总结

    成绩管理系统作业小结 devc中出现"ID Return"问题,我帮很多同学看完后发现,大部分还是自身程序问题,如全局变量大小写错误.没有添加c文件进工程等等.所以对于" ...

  3. 实验MyOD

    实验MyOD 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和运行结果截图,加上学号水印,提交码云代码链接. 代码如下: (刚开始 ...

  4. 【评分】集美大学软件工程1413班工程项目管理个人作业2——APP案例分析

    [评分]个人作业2--APP案例分析 作业要求 作业地址及完成情况 博文要求 通过分析你选中的产品,结合阅读<构建之法>,写一篇随笔,包含下述三个环节的所有要求. 第一部分 调研, 评测 ...

  5. Linux挂载

    1 文件系统中相关目录 dev:设备文件 media:挂载媒体设备,如光驱,U盘 mnt:让用户临时挂载别的文件系统 2 磁盘分区相关知识 1)磁盘包括IDE和SCSI两种接口: IDE接口:速度慢但 ...

  6. centos 开放端口

    1.修改文件/etc/sysconfig/iptables [root@zsq ~]# cd /etc/sysconfig/[root@zsq sysconfig]# vi iptables 文件内容 ...

  7. 清华集训2015 V

    #164. [清华集训2015]V http://uoj.ac/problem/164 统计 描述 提交 自定义测试 Picks博士观察完金星凌日后,设计了一个复杂的电阻器.为了简化题目,题目中的常数 ...

  8. bzoj 4373 算术天才⑨与等差数列

    4373: 算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.ph ...

  9. v7000数据恢复_MDisk重建数据恢复方法(北亚数据恢复)

    很多工程师都有这样的疑问,MDisk重建后还能不能恢复数据呢?应该怎么做才能恢复数据呢?本文这里就以IBM V7000存储为例,详细讲解因为某个MDisk被重建导致的数据丢失的恢复方法.我们本案例中的 ...

  10. MMA8451重力加速度计通过写内部校准寄存器进行校准

    |版权声明:本文为博主原创文章,未经博主允许不得转载. AN4069应用笔记中提到MMA8451的三个轴重力校准有两种方法, 第一种方法是简易校准,将贴有MMA8451的设备整体,Z轴正面朝上放在校准 ...