[Luogu 3275] SCOI2011 糖果

<题目链接>


第一道差分约束。感谢 AZe。

我的理解是根据一些不等关系建一个图,在图上边跑一个最长路(有时候是最短路)。

因为可能存在负环,所以必须用 SPFA!

好神奇啊,图论好强强啊。

然而 Capella 惨惨,用上了 0 号节点却从 1 开始初始化邻接表,导致 for 出不去了,就因为这个调了一个晚上。

指针选手初始化很重要啊。

加油qwq

#include <algorithm>
#include <cstdio>
#include <queue> #define nullptr NULL const int MAXN = 100010; int n, k;
long long ans; struct Graph
{
struct Edge
{
int to;
long long w;
Edge *next;
Edge(int to, long long w, Edge* next): to(to), w(w), next(next) {}
~Edge(void)
{
if(next != nullptr)
delete next;
}
}*head[MAXN];
Graph(int n)
{
std :: fill(head, head + n + 1, (Edge*)nullptr);
}
~Graph(void)
{
for(int i = 1; i <= n; ++i)
delete head[i];
}
void AddEdge(int u, int v, long long w)
{
head[u] = new Edge(v, w, head[u]);
}
void Build(int x, int a, int b)
{
if(x % 2 == 0 && a == b)
{
puts("-1");
exit(0);
}
switch(x)
{
case 1:
AddEdge(a, b, 0LL);
AddEdge(b, a, 0LL);
break;
case 2:
AddEdge(a, b, 1LL);
break;
case 3:
AddEdge(b, a, 0LL);
break;
case 4:
AddEdge(b, a, 1LL);
break;
case 5:
AddEdge(a, b, 0LL);
break;
}
}
}*G; namespace DiffConst
{
bool exist[MAXN];
int cnt[MAXN];
long long dist[MAXN];
bool SPFA(int S)
{
std :: queue<int> Q;
Q.push(S);
exist[S] = true;
while(!Q.empty())
{
int u = Q.front(), v;
Q.pop();
exist[u] = false;
for(Graph :: Edge *i = G -> head[u]; i != nullptr; i = i -> next)
if(dist[v = i -> to] < dist[u] + i -> w)
{
if(!exist[v])
{
if(++cnt[v] == n)
return false;
Q.push(v);
exist[v] = 1;
}
dist[v] = dist[u] + i -> w;
}
}
return true;
}
} int main(void)
{
scanf("%d %d", &n, &k);
G = new Graph(n);
for(int i = 1, x, a, b; i <= k; ++i)
{
scanf("%d %d %d", &x, &a, &b);
G -> Build(x, a, b);
}
for(int i = n; i >= 1; --i)
G -> AddEdge(0, i, 1LL);
if(DiffConst :: SPFA(0))
{
for(int i = 1; i <= n; ++i)
ans += DiffConst :: dist[i];
printf("%lld\n", ans);
}
else
puts("-1");
return 0;
}

谢谢阅读。

[Luogu 3275] SCOI2011 糖果的更多相关文章

  1. [luogu P3275] [SCOI2011]糖果

    [luogu P3275] [SCOI2011]糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些 ...

  2. 【luogu P3275 [SCOI2011]糖果】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3275 把不等式 A > B 转化成 A - B >= 1或者 B - A <= -1再差分 ...

  3. 洛谷 3275 [SCOI2011]糖果

    题目戳这里 N句话题意 有N个人,k个限制,有五种限制 如果X=1, 表示第A个小朋友的糖果必须和第B个小朋友的糖果一样多: 如果X=2, 表示第A个小朋友的糖果必须少于第B个小朋友的糖果: 如果X= ...

  4. BZOJ2330或洛谷3275 [SCOI2011]糖果

    BZOJ原题链接 洛谷原题链接 很明显的差分约束,但数据范围较大,朴素\(SPFA\)判正环求解会\(T\)(理论上如此,但我看到有挺多人用朴素的还跑得挺快..),所以需要优化. 我们所建立的有向图中 ...

  5. bzoj2330: [SCOI2011]糖果

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

  6. BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5395  Solved: 1750[Submit][Status ...

  7. bzoj 2330 [SCOI2011]糖果(差分约束系统)

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3574  Solved: 1077[Submit][Status ...

  8. BZOJ 2330: [SCOI2011]糖果( 差分约束 )

    坑爹...要求最小值要转成最长路来做.... 小于关系要转化一下 , A < B -> A <= B - 1 ------------------------------------ ...

  9. P3275 [SCOI2011]糖果 && 差分约束(二)

    学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间 ...

随机推荐

  1. J2EE 13种技术规范

    J2EE平台由一整套服务(种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述): 1.JDBC(Java Database Connectivity):    JDBC API为访问不同的数据 ...

  2. 手动解析Excel获取文件元数据

    工作中有遇到需要获取上传的Excel文件的列明.最大行数.大小等元数据信息.通常做法是通过Apache的POI工具加载文件然后再读取行列进行处理.这种方法很大的弊端就是需要把excel文件加载到内存, ...

  3. Android之自定义View学习(一)

    Android之自定义View学习(一) Canvas常用方法: 图片来源 /** * Created by SiberiaDante on 2017/6/3. */ public class Bas ...

  4. [2017BUAA软工]第3次个人作业

    软工第3次个人作业--案例分析 一. 调研,评测 1.软件的bug(至少两个,不少于40字) 测试软件: 必应词典移动端 测试平台:iPhone 6 bug1 对于翻译功能中的图片翻译功能,必应词典是 ...

  5. 通过loadrunner将http返回response写入文本txt中

    脚本如下 Action() { int myFile;//lr不支持FILE类型,所以定义一个int类型的file web_reg_save_param("goods_price" ...

  6. jmeter 多线程组间变量共享

    jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B中被调用的. 但是有时为了方便管理,我们可能是把各个接口单独存放在不同的线程组中.拿Cookie ...

  7. express入门学习(一)

    一.安装express cnpm || npm  install express --save ; 1. Hello  World var express = require('express'); ...

  8. json数据进行格式化

    <?php /** Json数据格式化 * @param Mixed $data 数据 * @param String $indent 缩进字符,默认4个空格 * @return JSON */ ...

  9. Linux 下安装mysql 8.0.11(CentOS 7.4 系统)

    CentOS 7 自带MariaDB (前mysql开发工程师开发的,因此与吗,mysql 有很多相似之处) 1.检查卸载自带的MariaDB rpm -qa|grep mariadb //查询出来已 ...

  10. lucene介绍

    1.https://blog.csdn.net/shuaicihai/article/details/65111523 2.https://www.cnblogs.com/rodge-run/p/65 ...