C++之路进阶——codevs2404(糖果)
2404 糖果
2011年省队选拔赛四川
幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。
输入的第一行是两个整数N,K。
接下来K行,表示这些点需要满足的关系,每行3个数字,X,A,B。
如果X=1, 表示第A个小朋友分到的糖果必须和第B个小朋友分到的糖果一样多;
如果X=2, 表示第A个小朋友分到的糖果必须少于第B个小朋友分到的糖果;
如果X=3, 表示第A个小朋友分到的糖果必须不少于第B个小朋友分到的糖果;
如果X=4, 表示第A个小朋友分到的糖果必须多于第B个小朋友分到的糖果;
如果X=5, 表示第A个小朋友分到的糖果必须不多于第B个小朋友分到的糖果;
输出一行,表示lxhgww老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出-1
5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
11
对于30%的数据,保证 N<=100
对于100%的数据,保证 N<=100000
对于所有的数据,保证 K<=100000,1<=X<=5,1<=A, B<=N
代码:
#include<cstdio>
#define maxn 1000100
#include<iostream> using namespace std; int cnt;
long long ans; struct cf
{
int n,m,head[maxn],v[maxn],to[maxn],next[maxn],rvs[maxn],ins[maxn],dis[maxn],q[maxn*];
void insert(int u,int vv,int w) {to[++cnt]=vv;next[cnt]=head[u];head[u]=cnt; v[cnt]=w;}
bool spfa()
{
int t=,w=;
q[]=;
ins[]=;
rvs[]=;
while (t<w)
{
int now=q[t++];
for (int i=head[now];i;i=next[i])
if (dis[to[i]]<dis[now]+v[i])
{
if (++rvs[to[i]]>=n) return ;
dis[to[i]]=dis[now]+v[i];
if (!ins[to [i]]){ins[to[i]]=;q[w++]=to[i];}
}
ins[now]=;
}
return ;
}
int start()
{
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)
{
int f,a,b;
scanf("%d%d%d",&f,&a,&b);
switch(f)
{
case :insert(a,b,); insert(b,a,); break;
case :if (a==b) {printf("-1\n");return ;} insert(a,b,);break;
case :insert(b,a,);break;
case :if (a==b) {printf("-1\n");return ;} insert(b,a,);break;
case :insert(a,b,); break;
}
}
for (int i=n;i>=;i--) insert(,i,);
if (!spfa()) {printf("-1\n");return ;}
for (int i=;i<=n;i++) ans+=dis[i];
printf("%lld\n",ans);
}
}cf;
int main()
{
cf.start();
return ;
}
C++之路进阶——codevs2404(糖果)的更多相关文章
- C++之路进阶codevs1269(匈牙利游戏)
1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- C++之路进阶——优先队列优化最短路径算法(dijkstra)
一般的dijkstra算法利用贪心的思想,每次找出最短边,然后优化到其他点的的距离,我们还采用贪心思路,但在寻找最短边进行优化,之前是双重for循环,现在我们用优先队列来实现. 代码解释: //样例程 ...
- C++之路进阶——HDU1880(魔咒词典)
---恢复内容开始--- New~ 欢迎参加2016多校联合训练的同学们~ 魔咒词典 Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 3 ...
- C++之路进阶——poj3461(Oulipo)
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35694 Accepted: 14424 Descript ...
- C++之路进阶——P2022
P2022 有趣的数 让我们来考虑1到N的正整数集合.让我们把集合中的元素按照字典序排列,例如当N=11时,其顺序应该为:1,10,11,2,3,4,5,6,7,8,9. 定义K在N个数中的位置为Q( ...
- C++之路进阶codevs1242(布局)
1242 布局 2005年USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold <:section class="hbox" ...
- C++之路进阶——codevs3333(高级打字机)
3333 高级打字机 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 早苗入手了最新的高级打字机.最新款自然有着与 ...
- C++之路进阶——codevs1789(最大获利)
1789 最大获利 2006年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 新的技术正冲击着 ...
- C++之路进阶——codevs2306(晨跑)
2306 晨跑 2009年省队选拔赛山东 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description Elaxia最近迷恋 ...
随机推荐
- yii1.1.3主从(多从)、读写分离配置
从新配置main.php片段 代码如下 ----------------------------------------------------------- 'db'=>array( 'con ...
- 蓝牙版本V4.2特征讲解说明
2014年12月4日,最新的蓝牙4.2标准颁布,改善了数据传输速度和隐私保护程度,并接入了该设备将可直接通过IPv6和6LoWPAN接入互联网.在新的标准下蓝牙信号想要连接或者追踪用户设备必须经过用户 ...
- su terminal get around---docker root
su : must be run from a terminal After some googling, I found the solution from Tero's glob. If you ...
- 在Windows上一键编译各种版本的Protobuf
所需工具 : cmake for windows 和 git for windows 原理:protobuf 是google的一个开源项目,其源代码在github上可以下载到,并且源码都采用cm ...
- php--无限极分类
效果图:
- 使用多种客户端消费WCF RestFul服务(三)——.net4.5篇
.net 4.5篇 在.net 4.5下面微软提供了System.Net.Http.dll可以非常方便的使用HTTP请求(其实是用来支持Asp.Net Web Api的,不过我们可以拿过来用) 服务仍 ...
- magento 切换数据库,使用不同数据库
1. 在app/etc/local.xml 中,添加新的数据库选项 <?xml version="1.0"?> <config> <global> ...
- Partial Tree---hdu5534(完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意:有n个节点,让这n个节点形成一棵树,这棵树的种类有很多种,现在告诉n-1个f[i],表示度 ...
- Round and Round We Go
http://acm.hdu.edu.cn/showproblem.php?pid=1313 考查大整数与小整数相乘 #include<iostream> #include<cstd ...
- LeetCode Basic Calculator II
原题链接在这里:https://leetcode.com/problems/basic-calculator-ii/ Implement a basic calculator to evaluate ...