【luogu P3275 [SCOI2011]糖果】 题解
题目链接:https://www.luogu.org/problemnew/show/P3275
把不等式 A > B 转化成 A - B >= 1或者 B - A <= -1再差分约束
B - A 不能是 <= 1
2333
// luogu-judger-enable-o2
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const int maxn = 100000 + 10;
ll n, m, ans, visnum[maxn], dis[maxn];
bool vis[maxn];
struct edge{
ll from, to, next, len;
}e[maxn<<2];
ll head[maxn], cnt;
queue<int> q;
/*struct cmp{
bool operator ()(ll &x, ll &y)
{
return dis[x] < dis[y];
}
};
priority_queue<ll, vector<ll>, cmp> q;*/
inline int read()
{
int k=0,f=1;
char c=getchar();
while(!isdigit(c))
{
if(c=='-')f=-1;
c=getchar();
}
while(isdigit(c))
{
k=(k<<1)+(k<<3)+c-48;
c=getchar();
}
return k*f;
}
inline void add(ll u, ll v, ll w)
{
e[++cnt].len = w;
e[cnt].next = head[u];
e[cnt].to = v;
head[u] = cnt;
}
bool SPFA()
{
while(!q.empty())
{
ll now = q.front();q.pop();
vis[now] = 0;
if(visnum[now] == n-1) return 1;
visnum[now]++;
for(ll i = head[now]; i != -1; i = e[i].next)
{
if(dis[e[i].to] > dis[now] + e[i].len)
{
dis[e[i].to] = dis[now] + e[i].len;
if(!vis[e[i].to])
{
vis[e[i].to] = 1;
q.push(e[i].to);
}
}
}
}
return 0;
}
int main()
{
memset(head, -1, sizeof(head));
//scanf("%lld%lld",&n,&m);
n = read(); m = read();
for(ll i = 1; i <= m; i++)
{
ll opt, u, v;
//scanf("%lld%lld%lld",&opt,&u,&v);
opt = read(); u = read(); v = read();
if(opt == 1)
{
add(u, v, 0);
add(v, u, 0);
}
if(opt == 2)
{
if(u == v)
{
printf("-1\n");
return 0;
}
add(u, v, -1);
}
if(opt == 3)
{
add(v, u, 0);
}
if(opt == 4)
{
if(u == v)
{
printf("-1\n");
return 0;
}
add(v, u, -1);
}
if(opt == 5)
{
add(u, v, 0);
}
}
for(ll i = n; i >= 1; i--)
{
add(0, i, -1);
dis[i] = 0x7fffffff;
}
int s = 0;
q.push(s);
dis[s] = 0; vis[s] = 1;
if(SPFA())
{
printf("-1\n");
return 0;
}
else
{
for(int i = 1; i <= n; i++)
ans += dis[i];
printf("%lld\n",-ans);
return 0;
}
}
【luogu P3275 [SCOI2011]糖果】 题解的更多相关文章
- [luogu P3275] [SCOI2011]糖果
[luogu P3275] [SCOI2011]糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些 ...
- 洛谷P3275 [SCOI2011]糖果 题解
题目链接: https://www.luogu.org/problemnew/show/P3275 分析: 本题就是一个裸的差分约束. 核心: x=1x=1x=1时,a=b,a−>b,b−> ...
- P3275 [SCOI2011]糖果 题解
一道差分约束的模板题. 题目 题意:n个人每个人至少一个糖果,另外要满足k个不等式,求最少糖果数. 差分约束系统 给定一组不等式 $ x[i]-x[j]<=c[k] $ (或 $ x[i]-x[ ...
- P3275 [SCOI2011]糖果 && 差分约束(二)
学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间 ...
- [Luogu 3275] SCOI2011 糖果
[Luogu 3275] SCOI2011 糖果 第一道差分约束.感谢 AZe. 我的理解是根据一些不等关系建一个图,在图上边跑一个最长路(有时候是最短路). 因为可能存在负环,所以必须用 SPFA! ...
- 洛谷——P3275 [SCOI2011]糖果
P3275 [SCOI2011]糖果 差分约束模板题,基本思路就是$d[v]+w[v,u]<=d[u]$,$Spfa$更新方法, 有点套路的是要建立原点,即图中不存在的点来向每个点加边,但同样这 ...
- 差分约束详解&&洛谷SCOI2011糖果题解
差分约束系统: 如果一个系统由n个变量和m个约束条件组成,形成m个形如ai-aj≤k的不等式(i,j∈[1,n],k为常数),则称其为差分约束系统(system of difference const ...
- 题解——洛谷P3275 [SCOI2011]糖果
一道条件非常多的差分约束 把\( a < b \)转化为\( a-b \le -1\)就可做了 \( a>b \)的情况同理 若有负环则无解输出-1 注意本题中要求每个人都有糖果 所以假设 ...
- 洛谷P3275 [SCOI2011]糖果 [差分约束系统]
题目传送门 糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比 ...
随机推荐
- 【问题记录】 Linux 安装 apache 遇到的一些问题
以下为linux上安装apache时自己遇到的一些问题,记录在这,以后遇到时也会不定时更新... 一.安装Apache提示APR not found的解决办法 解决方法: 1. 网站 http://a ...
- Tomcat配置自定义访问日志 --- 获取请求头部信息
使用tomcat,搭建完个人网站后,默认记录来访游客的信息是十分有限的,主要有ip和路径以及方法等. 有时候为了获取更多来访信息,比如请求的头部信息,这个时候就需要我们手动配置log了. 开始 进入T ...
- BNU27935——我爱背单词——————【数组模拟】
我爱背单词 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: ...
- 创建Django项目时,settings的静态文件的配置
STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )
- bzoj 5305: [Haoi2018]苹果树
Description Solution \(n\) 个点的二叉树的方案数是 \(n!\) 证明十分显然:新加入的点占掉了 \(1\) 个位置,新加了 \(2\) 个位置,那么多出来一个位置,所以第 ...
- git打补丁、还原补丁
打补丁.还原补丁 1.两个commit间的修改(包含两个commit,<r1>.<r2>表示两个提交的版本号,<r1>是最近提交) git format-patch ...
- 学习总结(一)java web连接池
大家都知道,在访问数据库时要与数据库建立连接.在jdbc中,用户与数据库建立连接后,取完数据或操作完数据后,就会断开这个连接.当下次还要访问数据库时,就会重新创建连接.这样很浪费资源,尤其是网页上有数 ...
- Django之(URL)路由系统
路由系统 简而言之,django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从而返回给客户 ...
- vue——组件
一.组件概念 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. // 定义一个名为 button-coun ...
- 【Android】6.0 添加Menu菜单组件、Intent启动活动、显式Intent、隐式Intent
1.0 在helloworld项目基础上创建活动SecondActivity: 2.0 其中main.xml: <?xml version="1.0" encoding=&q ...