bzoj2330(差分约束)
题解:这道题是练差分约束的一道好题目吧,我具体在代码中注释,这样更加好理解,
为什么求最长路呢?因为这样保证了满足条件,如果存在正权环,就表示无解,就是
正权环之间不断要更多的糖果才行。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std; typedef long long ll;
const int N=; int s,dis[N],mark[N],n,m;
int cnt=,head[N],next[N*],rea[N*],val[N*];
bool vis[N]; void add(int u,int v,int fee)
{
cnt++;
next[cnt]=head[u];
head[u]=cnt;
rea[cnt]=v;
val[cnt]=fee;
}
bool spfa()
{
queue<int>q;
q.push();
vis[dis[]=]=;
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=head[u];i!=-;i=next[i])
{
int v=rea[i],fee=val[i];
if(dis[u]+fee>dis[v])
{
dis[v]=dis[u]+fee;
if(++mark[v]>=n) return ;//表示无法满足
if(!vis[v])
{
vis[v]=;
q.push(v);
}
}
}
vis[u]=;
}
return ;
}
int main()
{
memset(head,-,sizeof(head));
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)
{
int xh,u,v;
scanf("%d%d%d",&xh,&u,&v);
switch (xh)
{
case :if(u!=v) add(u,v,),add(v,u,);
break;
case :if(u==v)
{
printf("-1");
return ;
}
add(u,v,);break;
case :if(u!=v) add(v,u,);break;//表示可以到达
case :if(u==v)
{
printf("-1");
return ;
}
add(v,u,);break;//因为最少,所以只要多一格糖果就可以了。
case :if(u!=v) add(u,v,);break;
}
}
for(int i=n;i;i--)
add(,i,);//初始,开辟超源点。
if(!spfa()) printf("-1");
else
{
ll ans=;
for(int i=;i<=n;i++)
ans+=dis[i];
printf("%lld\n",ans);
}
}
bzoj2330(差分约束)的更多相关文章
- 【BZOJ2330】【SDOI2012】糖果(差分约束,SPFA)
[BZOJ2330][SDOI2012]糖果 题面 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...
- 【bzoj2330】: [SCOI2011]糖果 图论-差分约束-SPFA
[bzoj2330]: [SCOI2011]糖果 恩..就是裸的差分约束.. x=1 -> (A,B,0) (B,A,0) x=2 -> (A,B,1) [这个情况加个A==B无解的要特 ...
- 差分约束 【bzoj2330】[SCOI2011]糖果
/*[bzoj2330][SCOI2011]糖果 2014年3月5日1,2761 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖 ...
- BZOJ2330:[SCOI2011]糖果(差分约束)
Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...
- bzoj2330: [SCOI2011]糖果(差分约束)
差分约束裸题,a==b的话分别建a>=b a<=b的边就行.倒序加边不然会TLE是什么鬼 #include<iostream> #include<cstring> ...
- 数据结构》关于差分约束的两三事(BZOJ2330)
差分约束,主要用来解决数学中的线性规划问题,通过差值与两个未知数可以转化为单源最长路问题(或负值最短路). 当有一个式子为x1-x2>=a时,我们可以建边,这条边设定为x1比x2大等a(或x2比 ...
- bzoj2330糖果——差分约束
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2330 差分约束,再建立一个源点0,向所有点连边权为1的边,表示每个人都会分到糖果: 答案较大 ...
- BZOJ2330 糖果[差分约束方案+spfa?/tarjan]
以往对于差分约束理解不是太深,导致这题屡次被坑,在此记录一下细节的理解. 差分约束实际上就是利用了spfa的一个特性:只要有$dis_y>dis_x+w_{x,y}$就松弛,直到所有边关系都满足 ...
- BZOJ4383 [POI2015]Pustynia[线段树优化建边+拓扑排序+差分约束]
收获挺大的一道题. 这里的限制大小可以做差分约束,从$y\to x$连$1$,表示$y\le x-1$即$y<x$,然后跑最长路求解. 但是,如果这样每次$k+1$个小区间每个点都向$k$个断点 ...
随机推荐
- JS函数参数
1.js不是面向对象,不可以重载函数.如果两个函数方法名相同,参数不同,那么js加载时后面的函数会覆盖前面的函数. 所以调用函数时只会调用后面的方法. 2.js设置可变参数时,可以用arguments ...
- Ext.grid.EditorGridPanel分页和查看全部
在gridPanel添加查看全部数据按钮,必须使得每页显示的数量pageSize为总条数,那么总页数就只会有一页. 1.获取store数据的总条数 var totalCount = grid.getS ...
- Winform DataGridView修改数据源界面不刷新问题
错误描述 对于dataGridView,设置数据源为一个List集合时,修改了List集合以后即使重新设置数据源界面也不会刷新. 注:如果先设置DataSource=null;可以重新加载,但是界面设 ...
- Apache2 httpd.conf 配置详解(一)
常用配置指令说明 ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录.默认为安装目录,不需更改. 语法:ServerRoot di ...
- Java中常见数据结构Set之HashSet
今天来说说Java集合中的Set系列之HashSet. Set我们众所周知的就是虑重功能, 我们平时在项目开发中也常用到这个特性的.那么Set为何能够虑重呢? 接下来我们就看下源码吧. Set ...
- JSON 理解
转自: http://blog.csdn.net/qyf_5445/article/details/8635578 (json很全面的理解) http://www.cnblogs.com/haitao ...
- 循环checked表单 元素
var poject_Array = ""; $('input[name="yearCardPoject"]:checked').each ...
- 探究JVM和GC
1.Java堆中各代分布: 图1:Java堆中各代分布 Young:主要是用来存放新生的对象. Old:主要存放应用程序中生命周期长的内存对象. Permanent:是指内存的永久保存区域,主要存放C ...
- 将home多余的空间分配到"/"分区下
一.操作过程 1.df -h 查看分区大小情况; [root@localhost /]# df -h Filesystem Size Used Avail Use% Mount ...
- 201521123084 《Java程序设计》第4周学习总结
第4周作业-面向对象设计与继承 1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 总结: (1)学会了如何给类和方法进行简单的注释: (2)学 ...