[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. salt-api使用

    salt-api 基本使用 目前salt API 支持的web模块如下: CherryPy Tornado WSGI 1.安装salt-api salt 使用 CherryPy来实现restful的a ...

  2. 2D变换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 为什么选择 .NET Core?

     为什么选择.NETCore? 学习新的开发框架是一项巨大的投资.您需要学习如何在新框架中编写,构建,测试,部署和维护应用程序.作为开发人员,有许多框架可供选择,很难知道什么是最适合的.即使您正在使用 ...

  4. Eclipse HTML Editor

    需插件: 1.GEF 3.1 安装程序下载 下载地址: http://download.eclipse.org/tools/gef/downloads/drops/R-3.1-200507071758 ...

  5. Qt4问题集锦

    一.Qt程序发布后加载的jpg.jpeg图片不可见 问题的提出: 最近在客户机器上部署安装QT编写的软件,发现只要是jpg.jpeg格式的图片都无法显示出来.最后发现必须按如下述步骤才能显示jpg.j ...

  6. 2018 南京icpc现场赛总结

    Day 0 提前5个小时从学校出发,在登机口坐下时,飞机还有1个多小时起飞. 航班准时起飞,到了南京以后直接坐地铁到学校附近(南京地铁票也太精致了吧). 因为天已经黑了,就只在学校附近转了一圈就回酒店 ...

  7. DAY4-Python学习笔记

    1.XML: 操作XML有两种方法:DOM和SAX DOM:把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点 SAX:是流模式,边读边解析,占用内存小,解析快,缺点是 ...

  8. Round 1 Over

    终于把题目清单上的 \(dp\) 写完了\(hhh\)

  9. 用Python实现的数据结构与算法:快速排序

    一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left( ...

  10. debian修改时区

    这里提供两种方法 一.使用dpkg-reconfigure修改 # dpkg-reconfigure tzdata Current default time zone: 'Asia/Shanghai' ...