[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 ...
 
随机推荐
- ORACLE 11G R2 RAC classical install OGG12.1(LINUX) 经典抽取模式单项同步配置OGG12.1
			
博文结构图如下: 一.环境描述以及注意事项 1.1 环境简介 IP 系统 Oracle版本 OGG版本 源端 172.16.10.16/36 RHEL6.5 oracle11204 12.1 目标端 ...
 - IO流回顾与总结第一篇之字节流与字符流的操作。。。。。
			
一.引言 趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来...... 回归正题,IO流顾名 ...
 - (译文)React----React应用程序流式服务端渲染
			
好处 React16推出了流式服务端渲染,它允许你并行地分发HTML片段.这样可以让渲染 出的首字节有意义的内容给用户速度更快. (例子1,上面部分是一次性转换,下面是流渲染,两种方式) 而且相对re ...
 - Beta No.6
			
今天遇到的困难: github服务器响应很慢 推图的API接口相应较慢,超过了初始设定的最大延迟时间,导致了无法正确返回图片 ListView滑动删除Demo出现了某些Bug,这些Bug可能导致了某些 ...
 - Beta第七天
			
听说
 - 算法第四版学习笔记之优先队列--Priority Queues
			
软件:DrJava 参考书:算法(第四版) 章节:2.4优先队列(以下截图是算法配套视频所讲内容截图) 1:API 与初级实现 2:堆得定义 3:堆排序 4:事件驱动的仿真 优先队列最重要的操作就是删 ...
 - GPUImage实战问题解决
			
在项目中遇到了使用完GPUImage以后,内存不释放的问题,翻阅官方API,找到了解决方法: deinit{ GPUImageContext.sharedImageProcessingContext( ...
 - 前端面试题之html
			
1.简述<!DOCTYPE> 的作用,标准模式和兼容模式各有什么区别? <!DOCTYPE> 位于文档的第一行,告知浏览器使用哪种规范. 如果不写DOCTYPE,浏览器会进入混 ...
 - C# if判断语句执行顺序
			
DataTable dt = null; )//不报错,因为先执行dt != null 成立时才执行dt.Rows.Count > 0 { } && dt != null)//报 ...
 - 深入理解PHP之require/include顺序
			
深入理解PHP之require/include顺序 作者: Laruence( ) 本文地址: http://www.laruence.com/2010/05/04/1450.html 转载请注明 ...