[Luogu 3275] SCOI2011 糖果
[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 糖果的更多相关文章
- [luogu P3275] [SCOI2011]糖果
[luogu P3275] [SCOI2011]糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些 ...
- 【luogu P3275 [SCOI2011]糖果】 题解
题目链接:https://www.luogu.org/problemnew/show/P3275 把不等式 A > B 转化成 A - B >= 1或者 B - A <= -1再差分 ...
- 洛谷 3275 [SCOI2011]糖果
题目戳这里 N句话题意 有N个人,k个限制,有五种限制 如果X=1, 表示第A个小朋友的糖果必须和第B个小朋友的糖果一样多: 如果X=2, 表示第A个小朋友的糖果必须少于第B个小朋友的糖果: 如果X= ...
- BZOJ2330或洛谷3275 [SCOI2011]糖果
BZOJ原题链接 洛谷原题链接 很明显的差分约束,但数据范围较大,朴素\(SPFA\)判正环求解会\(T\)(理论上如此,但我看到有挺多人用朴素的还跑得挺快..),所以需要优化. 我们所建立的有向图中 ...
- bzoj2330: [SCOI2011]糖果
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- bzoj 2330 [SCOI2011]糖果(差分约束系统)
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3574 Solved: 1077[Submit][Status ...
- BZOJ 2330: [SCOI2011]糖果( 差分约束 )
坑爹...要求最小值要转成最长路来做.... 小于关系要转化一下 , A < B -> A <= B - 1 ------------------------------------ ...
- P3275 [SCOI2011]糖果 && 差分约束(二)
学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间 ...
随机推荐
- vue.js常用指令
本文摘自:http://www.cnblogs.com/rik28/p/6024425.html Vue.js的常用指令 上面用到的v-model是Vue.js常用的一个指令,那么指令是什么呢? Vu ...
- 项目冲刺Beta第二篇博客
Beta版本冲刺计划安排 1.当天站立式会议照片: 2.工作分工: 团队成员 分工 张洪滨060 排行榜界面美化 陈敬轩059 注册成功界面美化 黄兴067 登录界面美化 林国梽068 答题界 ...
- Current request is not a multipart request
1. 文件上传需要在form表单中添加<form enctype="multipart/form-data"> 2. SpringMVC默认是关闭fileupload功 ...
- 对JAVA RMI的认识
RMI的定义 RPC (Remote Procedure Call):远程方法调用,用于一个进程调用另一个进程中的过程,从而提供了过程的分布能力. RMI(Remote Method Invocati ...
- vue.js 中slot 用处大(转载)
什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有 ...
- getResource()的使用总结 ;
1.通过ClassLoader来加载getResource()时不需要加 "/" 因为source是从main开始的; Thread.currentThread().getCont ...
- oracle 3大范式 理解
CREATE OR REPLACE PACKAGE pack3 AS FUNCTION fun_calc (num1 NUMBER ,num2 NUMBER ) RETURN number ; fun ...
- 关于对i++,++i的理解
i++,代表 先赋值,在加:++i,代表先自加再赋值:后台console例子中可以看到第一个例子:var a= i++; i是等于1的:先赋值,所以打印出a =1的:而i++后为2:所以打印出a = ...
- getcontext makecontext setcontext swapcontext介绍
ucontext簇函数学习 https://github.com/zfengzhen/Blog/blob/master/article/ucontext%E7%B0%87%E5%87%BD%E6%95 ...
- iOS 数组和字典排序
一.数组排序 数组排序方式1: //初始化可变数组 NSMutableArray *arr1=[NSMutableArray arrayWithObjects:@"giu",@&q ...