【Luogu 3275】[SCOI2011]糖果
Luogu P3275
显然是一道经典的差分约束系统
相关知识可以查看:【Luogu 1993】差分约束系统问题——小K的农场
值得注意的是这题使用最长路更合适,因为每一个人都要取得至少一个糖果。在添加超级起点时,这本身就是一个使用大于等于号的关系,如果更换成小于等于号则会导致边的方向改变,这样又违背了超级起点的初衷。
#include<cstdio>
#include<algorithm>
using namespace std;
struct data
{
int to,next,val;
}e[500005];
int cost[500005],flag,head[500005],n,m,a,b,c,cnt,x,cnt1[500005],p=500005;
class queue
{
int x[5000005],head,tail;
public:
void push(int y)
{
x[tail]=y;
tail++;
tail%=p;
}
void pop()
{
head++;
head%=p;
}
bool empty()
{
return head==tail;
}
int back()
{
return x[tail-1];
}
int front()
{
return x[head];
}
}que;
bool vis[500005];
void add(int u,int v,int w)
{
e[++cnt].to=v;
e[cnt].next=head[u];
e[cnt].val=w;
head[u]=cnt;
}
void First(int s)
{
for (int i=1;i<=n;i++) cost[i]=-0x3f3f3f3f;
cost[s]=0;
}
bool SPFA(int s)
{
que.push(s);
vis[s]=true;
while (!que.empty())
{
int now=que.front();
que.pop();
vis[now]=false;
for (int i=head[now];i;i=e[i].next)
{
if (cost[e[i].to]<cost[now]+e[i].val)
{
cost[e[i].to]=cost[now]+e[i].val;
if (!vis[e[i].to])
{
que.push(e[i].to);
vis[e[i].to]=true;
}
cnt1[e[i].to]=cnt1[now]+1;
if (cnt1[e[i].to]>n) return false;
}
}
}
return true;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&a,&b);
if (x==1) add(a,b,0),add(b,a,0);
if (x==2)
{
if (a==b)
{
printf("-1");
return 0;
}
add(a,b,1);
}
if (x==3) add(b,a,0);
if (x==4)
{
add(b,a,1);
if (a==b)
{
printf("-1");
return 0;
}
}
if (x==5) add(a,b,0);
//特判可以防止TLE
}
for (int i=n;i>=1;i--)
add(n+1,i,1);//反向是为了防TLE,数据比较特别……
First(n+1);
if (!SPFA(n+1)) printf("-1");
else
{
long long ans=0;
for (int i=1;i<=n;i++)
ans+=cost[i];
printf("%lld",ans);
}
return 0;
}
【Luogu 3275】[SCOI2011]糖果的更多相关文章
- [Luogu 3275] SCOI2011 糖果
[Luogu 3275] SCOI2011 糖果 第一道差分约束.感谢 AZe. 我的理解是根据一些不等关系建一个图,在图上边跑一个最长路(有时候是最短路). 因为可能存在负环,所以必须用 SPFA! ...
- [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]糖果 && 差分约束(二)
学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间 ...
随机推荐
- RPA UiPath 官网视频
RPA UiPath 官网视频相关学习 有一些官网的截图翻译,本来打算把考试题也整理出来,结果没整,另附官网视频 RPA的好处: 广泛的自动化:跨越越来越多的行业,RPA加速在银行和金融,保险,医疗 ...
- Tkinter 之Entry输入框标签
一.参数说明 语法 作用 Entry(root,width=20) 组件的宽度(所占字符个数) Entry(root,fg='blue') 前景字体颜色 Entry(root,bg='blue') 背 ...
- SpringCloud之链路追踪整合Sleuth(十三)
前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. 在一个完整的微服务架构项目中,服务之间的调用是很复杂的,当其中某一个服务出现了问题或者访问超时,很 难直接确定是由哪个服务引起的,所以 ...
- 设计模式C++描述----06.适配器(Adapter)模式
一. 定义 适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. Adapter 模式的两种类别:类模式和对象模式. 二. 举例说明 实际中 ...
- u检验粗浅理解
假设检验是以小概率事件,在一次实验中是不可能发生为前提(事实上是有可能发生的,但不是这样说的话,就落入一个圈,不能继续玩了),来否认原假设. u检验的定义: 已知从正态母体N(u,σ2)中抽得容量为n ...
- CSPS模拟 63
每天都考试都快傻了O_o $T1 Median$ 一看就不能从通项上下手.. 那么就是..给你一个序列..区间中位数.. 对顶堆! 爆调2h,心态炸裂. 据说根据鬼畜的函数定义和$mod<=le ...
- 简述同步和异步,以及js的任务队列.
javascript是单线程的一门语言,所以在执行任务的时候,所有任务必须排队,然后一个一个的执行.这就是同步模式 所以同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个 ...
- windows下同时装了Python3和Python2,如何区分使用?
1.前言 想学习Python3,但是暂时又离不开Python2.在Windows上如何让它们共存呢? 目前国内网站经常会让大家把其中一个python.exe改个名字,这样区分开两个可执行文件的名字,但 ...
- Python实现定时发送邮件代码
mailtools.py代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2017/12/22 17:50 # @Desc : ...
- Pycharm创建项目时 自动添加头部信息
1.打开PyCharm,选择File--Settings 2.依次选择Editor---Code Style-- File and Code Templates---Python Script 3.. ...