bzoj2330糖果——差分约束
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2330
差分约束,再建立一个源点0,向所有点连边权为1的边,表示每个人都会分到糖果;
答案较大,需要开long long;
据说有个大数据会T,所以需要0点从n向1连边;
WA了数次,竟然是没看清条件...不少于,不多于什么的...
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
queue<int>q;
int const MAXN=1e5+;
int n,k,head[MAXN],ct,dis[MAXN],cnt[MAXN];
bool in[MAXN];
long long ans;
struct N{
int to,next,w;
N(int t=,int n=,int w=):to(t),next(n),w(w) {}
}edge[MAXN<<];
bool spfa(int s)
{
memset(in,,sizeof in);
memset(dis,-,sizeof dis);
dis[s]=;in[s]=;q.push(s);cnt[s]=;
while(q.size())
{
int x=q.front();q.pop();in[x]=;
for(int i=head[x],u;i;i=edge[i].next)
{
if(dis[u=edge[i].to]<dis[x]+edge[i].w)
{
if(++cnt[u]>=n)return ;
dis[u]=dis[x]+edge[i].w;
if(!in[u])in[u]=,q.push(u);
}
}
}
return ;
}
int main()
{
scanf("%d%d",&n,&k);
int tp,x,y;
for(int i=;i<=k;i++)
{
scanf("%d%d%d",&tp,&x,&y);
if(tp==){edge[++ct]=N(y,head[x],),head[x]=ct;
edge[++ct]=N(x,head[y],),head[y]=ct;}
if(tp==){if(x==y){printf("-1");return ;}
else edge[++ct]=N(y,head[x],),head[x]=ct;}
if(tp==)edge[++ct]=N(x,head[y],),head[y]=ct;
if(tp==){if(x==y){printf("-1");return ;}
else edge[++ct]=N(x,head[y],),head[y]=ct;}
if(tp==)edge[++ct]=N(y,head[x],),head[x]=ct;
}
for(int i=n;i;i--)
edge[++ct]=N(i,head[],),head[]=ct;
if(!spfa())
{
printf("-1");return ;
}
for(int i=;i<=n;i++)ans+=dis[i];
printf("%lld",ans);
return ;
}
bzoj2330糖果——差分约束的更多相关文章
- BZOJ2330 糖果[差分约束方案+spfa?/tarjan]
以往对于差分约束理解不是太深,导致这题屡次被坑,在此记录一下细节的理解. 差分约束实际上就是利用了spfa的一个特性:只要有$dis_y>dis_x+w_{x,y}$就松弛,直到所有边关系都满足 ...
- BZOJ2330:[SCOI2011]糖果(差分约束)
Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...
- bzoj2330(差分约束)
题解:这道题是练差分约束的一道好题目吧,我具体在代码中注释,这样更加好理解, 为什么求最长路呢?因为这样保证了满足条件,如果存在正权环,就表示无解,就是 正权环之间不断要更多的糖果才行. #inclu ...
- P3275 [SCOI2011]糖果 && 差分约束(二)
学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间 ...
- BZOJ 2330 SCOI2011糖果 差分约束
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2819 Solved: 820 题目连接 http://www ...
- bzoj 2330 [SCOI2011]糖果 差分约束模板
题目大意 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...
- 洛谷P3275 [SCOI2011]糖果(差分约束)
题目描述 幼儿园里有 $N$ 个小朋友,$lxhgww $老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...
- [SCOI2011]糖果 (差分约束)
题目链接 Solution 差分约束乱搞就好了. 需要注意的地方: 对于大于等于的直接联等于,应为等于,因为对于我满足条件而言,等于总是最好的. 对于等于的,注意要建双向边. 然后要开 \(long~ ...
- 【BZOJ2330】【SCOI2011】糖果 [差分约束]
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 幼儿园 ...
随机推荐
- AngularJS的ng-repeat显示属性名和属性值
代码下载:https://files.cnblogs.com/files/xiandedanteng/AngularJSAuthorRepeat.rar 代码: <!DOCTYPE HTML P ...
- Ubuntu中一次更改用户名带来的连锁反应
我是一个ubuntu新手,接触ubuntu半年不到,装系统的时候输入了一个用户名,但是最近突然想更名了,这是悲剧的开始! google:ubuntu change username等相关的关键字,最终 ...
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...
- android相关文件夹的存取方式与函数解析---全
因为排版问题.转为markdown编辑: http://blog.csdn.net/self_study/article/details/58587412
- bvlc_reference_caffenet.caffemodel
#uncoding:utf-8 # set up Python environment: numpy for numerical routines, and matplotlib for plotti ...
- 《Android Studio有用指南》7.1 AndroidStudio代码检查工具概述
本文节选自<Android Studio有用指南> 作者: 毕小朋 博客: http://blog.csdn.net/wirelessqa 眼下本书已上传到百度阅读, 在百度中搜索[Anr ...
- oracle sql修改序列为当前序列开始
declare v_num integer; last_value integer;Begin select SEQ_TBM_ID.NEXTVAL into last_value from d ...
- 解决怎样监听Activity切换
本篇博文在我之前的博文中已经提到了,可是监听Activity切换又能够作为一个单独的内容来叙述,因此这里又单独拿了出来进行赘述. Activity的切换无非有两种.第一种:启动或者创建一个新的Acti ...
- LeetCode(70)题解: climbing-stairs
https://leetcode.com/problems/climbing-stairs/ 题目: You are climbing a stair case. It takes n steps t ...
- EasyPusher手机直播图像旋转90度后画面重复的问题
本文转自:http://blog.csdn.net/holo_easydarwin/article/details/51147379 最初在做EasyPusher手机直播的时候遇到过一个问题:手机竖屏 ...